บทความสอนกราฟิก

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 2817|ตอบกลับ: 0

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

[คัดลอกลิงก์]

272

กระทู้

272

โพสต์

979

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
979
แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-29 22:41

Date_&_Month.png
[Renpy] 52. วิธีสั่งให้โปรแกรมแสดง "วัน" และ"เดือน" Date Overlay

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

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

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

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

ขั้นตอนที่ 1 ให้เตรียมภาพพที่จะนำมาใช้ทำเป็นพื้นหลังของวัน และเดือนค่ะขนาดกว้างประมาณ 250 x 50 pt บันทึกไฟล์เป็นสกุล .png
Date_&_Month_01.png
ขั้นตอนที่ 2
-เปิดไฟล์script.rpy ขึ้นมา และทรกโค๊ดก่อน  labelstart: ลงไปดังนี้ค่ะ(หรือถ้าไม่อยากให้มันดูเกะกะเกินไปก็เอาใส่ไว้ที่บรรทัดท้ายสุดของไฟล์ 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)
คัดลอกไปที่คลิปบอร์ด
อธิบายโค๊ดนะค่ะ
- defdate_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 ซ้ำใหม่อีกครั้ง

คัดลอกไปที่คลิปบอร์ด
.....ตัวอย่างการเขียนโค๊ดดังที่กล่าวมาข้างต้นทั้งหมดก็จะประมาณนี้ค่ะ
(คลิกที่ภาพเพื่อดูแบบขนาดเต็ม)
Date_&amp;_Month_02.png
(***ในตัวอย่างข้างบนนี้ข้าพเจ้ากำหนดให้วนลูบแค่ 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 ตอนบ่าย
คัดลอกไปที่คลิปบอร์ด
Date_&amp;_Month.png
ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^"
******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)

ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|GraphicFUFU

GMT+7, 2024-5-5 19:16 , Processed in 0.130589 second(s), 21 queries .

Powered by Discuz! X3.4 R20180101, Rev.59

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้