Thaigraph

 

   

ค้นหา
Thaigraph หน้าฟอรั่ม Ren'Py [renpy] วิธีสั่งให้โปรแกรมแสดง ...
ดู: 2088|ตอบ: 3
go

[renpy] วิธีสั่งให้โปรแกรมแสดง "วัน" และ "เดือน" Date Overlay

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 23-3-2013 20:53 |แสดงโพสต์ทั้งหมด


[renpy] วิธีสั่งให้โปรแกรมแสดง "วัน" และ "เดือน" Date Overlay

เกมส์ที่มีการกำหนดให้แสดง "วันที่" โดยมากจะเป็นเกมส์ที่มีรูปแบบจำลองการดำเนินชีวิตไปในแต่ละวัน วนเวียนซ้ำๆ เช่น ตื่นนอน ไปทำงาน/เรียน กลับบ้าน และเข้านอน

ผู้สร้างเกมส์สามารถแทรกเงื่อนไข ที่จะทำให้เกิดเหตุการณ์แต่ละช่วงเวลา มีความแตกต่างกันได้  โดยการแทรกโค๊ด if - else เพิ่มเข้าไป ซึ่งตรงส่วนนี้ข้าพเจ้าจะแนะนำวิธีการเขียนโค๊ดไว้ให้ในตอนท้ายของบทความค่ะ

นอกจากนี้การแสดงวันที่มีประโยชน์ตรงที่ ทำให้ผู้เล่นรู้ตัวว่ากำลังดำเนินเนื้อเรื่องมาถึงช่วงระยะเวลาไหนของเกมส์ (ใกล้จบ หรือเพิ่งมาได้แค่ครึ่งท่อนของเกมส์)

และนอกจากนี้ประโยชน์ของการกำหนดให้แสดงวันที่ ยังช่วยลดภาระในเรื่องการแต่งเนื้อเรื่องที่ซับซ้อนให้ลดลง ดูเป็นระบบระเบียบมากขึ้น ทำให้มองเห็นทิศทางการจบของเกมส์ได้ง่ายขึ้น


ขั้นตอนที่ 1 ให้เตรียมภาพพที่จะนำมาใช้ทำเป็นพื้นหลังของวัน และเดือนค่ะ ขนาดกว้างประมาณ 250 x 50 pt บันทึกไฟล์เป็นสกุล .png




ขั้นตอนที่ 2
-เปิดไฟล์ script.rpy ขึ้นมา และทรกโค๊ดก่อน  label start: ลงไปดังนี้ค่ะ (หรือถ้าไม่อยากให้มันดูเกะกะเกินไปก็เอาใส่ไว้ที่บรรทัดท้ายสุดของไฟล์ options.rpy ก็ได้เหมือนกันค่ะ)

Code:
  1. init:
  2.     $ month = "มกราคม"
  3.     $ day = 1

  4.     python hide:
  5.         def date_overlay():
  6.             if show_date:
  7.                 ui.image("date_month.png",
  8.                          xpos=0.0, xanchor="left",
  9.                          ypos=0.0, yanchor="top")
  10.                
  11.                 ui.text("วันที่ %d " % day + month , size=21, bold= True,
  12.                     color="#ffffff",xpos=0.0,ypos=0.0)

  13.         config.overlay_functions.append(date_overlay)
คัดลอกไปที่คลิปบอร์ด

อธิบายโค๊ดนะค่ะ
- def date_overlay(): เรียกใช้ฟังก์ชั่นชื่อ date_overlay
-  if show_date: คือ ถ้า show_date = True (เป็นจริง) ให้ทำตามเงื่อนไขดังนี้
- "วันที่ %d " % day + month  คือ ให้แสดงคำว่า "วันที่" แล้วตามด้วย %d (ตัวแปรที่มีรูปแบบเป็นตัวเลขใช้คำนวณ) ซึ่งก็คือตัวแปรของ day + month (ตัวแปรเดือนซึ่งมีค่า = "มกราคม")

- size=21 กำหนดขนาดของ Text
- bold= True คือโค๊ดที่กำหนดให้ Text เป็นตัวหนา ถ้าไม่ต้องการก็ให้เอาออก
- xpos=0.0,ypos=0.0 ใช้ปรับตำแหน่งของภาพพื้นหลัง วันที่  และเดือน ที่จะให้แสดงบนหน้าจอเกมส์
- config.overlay_functions.append(date_overlay) เป็นกำหนดให้ฟังก์ชั่นชื่อ date_overlay มีผลกับหน้าจอเกมส์


ขั้นตอนที่ 3
- หลังจาก label start: ให้ใส่โค๊ดเพิ่มลงไปดังนี้ค่ะ (เพื่อเปิดใช้งาน)
  1. $ show_date = True
คัดลอกไปที่คลิปบอร์ด

จากนั้นก็ให้นำโค๊ดด้านล่างนี้ไปใส่ไว้ที่ตำแหน่งท้ายๆของเกมส์เพิ่มเป็นการเพิ่มค่า (ตัวแปร)เลขวันที่ให้เพิ่มขึ้นทีละ +1)  

  1. $ day += 1
คัดลอกไปที่คลิปบอร์ด

สำหรับรูปแบบเกมส์ที่จะต้องกำหนดให้มีเหตุการณ์ส่วนใหญ่จะเกิดขึ้นซ้ำๆ กันในแต่ละวันนั้น สิ่งที่ขาดไม่ได้ก็คือรูปแบบการเขียนโปรแกรม ที่จะต้องทำให้มีการวนกลับมาซ้ำที่เดิมซ้ำๆ หลายๆรอบ

เราควรจะเขียนโปรแกรมให้มีการวนกลับมาที่ช่วงเวลาเดิมของแต่ละวันซ้ำๆกัน โดยใช้ label และคำสั่ง jump มาช่วย เพื่อให้ทำให้โปรแกรมวนซ้ำๆกลับมาที่เดิม

แต่ทว่าในเขียนโปรแกรมให้มีการวนไปมาระหว่าง label ที่ไม่มีวันจบสิ้น เราก็จำเป็นต้องสร้างเงื่อนไขขึ้นมาเพื่อดักทางให้เกมส์สามารถ "สิ้นสุดการวนลูบ" ได้ (ไม่งั้นก็เล่นไปจนตายมันก็วนกลับที่เดิมไปเรื่อยๆ ไม่จบสักที) โดยเงื่อนไขดังกล่าว จะเขียนในรูปแบบนี้ค่ะ (แล้วแต่จะนำไปประยุกต์ใช้)


  1. if day == 30: #<<----ถ้าวันที่ = 30 ให้ทำตามคำสั่งด้านล่าง
  2.     return #<<----สั่งให้จบเกมส์ (กลับไปที่หน้า main menu)

  3. else: #<<--- ถ้ายังไม่ถึงวันที่ 30
  4.     $ day += 1 #<<---ขึ้นวันใหม่( date = date + 1)
  5.     jump Morning #<<---กลับไปที่ label Morning ซ้ำใหม่อีกครั้ง
คัดลอกไปที่คลิปบอร์ด


.....ตัวอย่างการเขียนโค๊ดดังที่กล่าวมาข้างต้นทั้งหมดก็จะประมาณนี้ค่ะ
(คลิกที่ภาพเพื่อดูแบบขนาดเต็ม)


(***ในตัวอย่างข้างบนนี้ข้าพเจ้ากำหนดให้วนลูบแค่ 2 รอบพอ ถ้ากำหนดให้ครบ 30 รอบ (30วัน)ล่ะก็ เทสโปรแกรมเหนื่อยแย่ คลิกเม้าส์มือหงิก


และอีกเรื่องที่ค้างไว้คือ การสร้างเงื่อนไขให้แต่ละช่วงเวลานั้นๆ ของแต่ละวัน มีความแตกต่างกันออกไปบ้างตามแต่สถานการณ์ หรือแล้วแต่เหตุการณ์ การเขียนโค๊ดก็จะประมาณนี้ค่ะ


ข้าพเจ้ายกตัวอย่างเหตุการณ์ที่มีโอกาสที่จะขึ้นในช่วงเวลาเช้าของแต่ละวัน โดยใช้ตัวเลข "วันที่" มาเป็นตัวกำหนดเหตุการณ์ที่ตัวละครหลักจะต้องประสบ เมื่อถึงเวลา และช่วงเวลาที่กำหนด


  1. label Morning: #กิจกรรมที่เกิดขึ้นในตอนเช้า
  2.     scene black
  3.     show viccha2 with dissolve

  4.     if day == 2: #ถ้าวันที่ = 2 ให้ทำตามเงื่อนไขดังนี้
  5.         jump  meet_kawii
  6.   
  7.     if day == 5: #ถ้าวันที่ = 5 ให้ทำตามเงื่อนไขดังนี้
  8.         jump meet_kawii_at_classroom

  9.     if day == 12: #ถ้าวันที่ = 12 ให้ทำตามเงื่อนไขดังนี้
  10.         jump meet_karin

  11.     else: #ถ้าวันที่ ไม่เท่ากับ 2,5,12 ให้ทำตามคำสั่งดังต่อไปนี้
  12.         b "ใส่เนื้อเรื่องปกติประจำวันที่เกิดขึ้นช่วงเช้า....................."

  13.         jump Afternoon <---กระโดดไปที่ label ตอนบ่าย
คัดลอกไปที่คลิปบอร์ด
ขอให้สนุกกับการสร้างเกมส์นะค่ะ

บทความโดย NOOKFUFU2
(ขอสงวนสิทธิ์ให้เผยแพร่เฉพาะในเว็บไทยกราฟเท่านั้น!!!)

ไฟล์แนบ: คุณจำเป็นต้องเข้าสู่ระบบก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีแอคเคานต์หรือยังไม่ได้เป็นสมาชิก กรุณาสมัครสมาชิก
บางบทความคุณจำเป็นต้องสมัครสมาชิกแบบ VIP และ SUPERVIP ถึงจะเข้าอ่านบทความได้

Rank: 1

โพสต์เมื่อ 27-10-2014 19:44 |แสดงโพสต์ทั้งหมด
อยากได้เวลานะครับ day noon evening night ใส่ที่เดียวกันกับวันเดือนไม่ได้จะใส่แทนที่นะครับ

Rank: 1

โพสต์เมื่อ 7-9-2015 20:37 |แสดงโพสต์ทั้งหมด
มันไม่ eror นะ!! แต่ทำไมมันถึงไม่ขึ้นล่ะครับ มันโล่งเลย ชื่อไฟล์ภาพก็เปลี่ยนแล้ว

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 15-9-2015 03:19 |แสดงโพสต์ทั้งหมด
ตอบกระทู้ shina ตั้งกระทู้

ได้ใส่คำนี้ที่หลัง label start หรือยังค่ะ "$ show_date = True " ถ้าไม่ใส่มันจะไม่แสดง
คุณต้องเข้าสู่ระบบก่อนจึงจะสามารถตอบกลับ เข้าสู่ระบบ | สมัครสมาชิก


Thaigraph

GMT+7, 16-9-2019 21:51 , Processed in 0.086480 second(s), 20 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc. Thai Language by DiscuzThai! Team.

Top 10 Best Sellers in Clothing for 2017 Top 10 Best Sellers in Clothing Best Sellers in Clothing
Top 10 Best Sellers in Books reviewer 2017 Top 10 Best Sellers in Books Best Sellers in Books