แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-29 22:41
[Renpy] 52. วิธีสั่งให้โปรแกรมแสดง "วัน" และ"เดือน" Date Overlay
เกมส์ที่มีการกำหนดให้แสดง "วันที่"โดยมากจะเป็นเกมส์ที่มีรูปแบบจำลองการดำเนินชีวิตไปในแต่ละวัน วนเวียนซ้ำๆ เช่นตื่นนอน ไปทำงาน/เรียน กลับบ้าน และเข้านอน
ผู้สร้างเกมส์สามารถแทรกเงื่อนไข ที่จะทำให้เกิดเหตุการณ์แต่ละช่วงเวลามีความแตกต่างกันได้ โดยการแทรกโค๊ด if -else เพิ่มเข้าไปซึ่งตรงส่วนนี้ข้าพเจ้าจะแนะนำวิธีการเขียนโค๊ดไว้ให้ในตอนท้ายของบทความค่ะ
นอกจากนี้การแสดงวันที่มีประโยชน์ตรงที่ทำให้ผู้เล่นรู้ตัวว่ากำลังดำเนินเนื้อเรื่องมาถึงช่วงระยะเวลาไหนของเกมส์ (ใกล้จบหรือเพิ่งมาได้แค่ครึ่งท่อนของเกมส์)
และนอกจากนี้ประโยชน์ของการกำหนดให้แสดงวันที่ยังช่วยลดภาระในเรื่องการแต่งเนื้อเรื่องที่ซับซ้อนให้ลดลงดูเป็นระบบระเบียบมากขึ้น ทำให้มองเห็นทิศทางการจบของเกมส์ได้ง่ายขึ้น
ขั้นตอนที่ 1 ให้เตรียมภาพพที่จะนำมาใช้ทำเป็นพื้นหลังของวัน และเดือนค่ะขนาดกว้างประมาณ 250 x 50 pt บันทึกไฟล์เป็นสกุล .png
ขั้นตอนที่ 2
-เปิดไฟล์script.rpy ขึ้นมา และทรกโค๊ดก่อน labelstart: ลงไปดังนี้ค่ะ(หรือถ้าไม่อยากให้มันดูเกะกะเกินไปก็เอาใส่ไว้ที่บรรทัดท้ายสุดของไฟล์ options.rpyก็ได้เหมือนกันค่ะ)
Code:
- init:
- $ month = "มกราคม"
- $ day = 1
- python hide:
- def date_overlay():
- if show_date:
- ui.image("date_month.png",
- xpos=0.0, xanchor="left",
- ypos=0.0, yanchor="top")
-
- ui.text("วันที่ %d " % day + month , size=21, bold= True,
- color="#ffffff",xpos=0.0,ypos=0.0)
- 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)
สำหรับรูปแบบเกมส์ที่จะต้องกำหนดให้มีเหตุการณ์ส่วนใหญ่จะเกิดขึ้นซ้ำๆ กันในแต่ละวันนั้นสิ่งที่ขาดไม่ได้ก็คือรูปแบบการเขียนโปรแกรมที่จะต้องทำให้มีการวนกลับมาซ้ำที่เดิมซ้ำๆ หลายๆรอบ
เราควรจะเขียนโปรแกรมให้มีการวนกลับมาที่ช่วงเวลาเดิมของแต่ละวันซ้ำๆกันโดยใช้ label และคำสั่ง jumpมาช่วย เพื่อให้ทำให้โปรแกรมวนซ้ำๆกลับมาที่เดิม
แต่ทว่าในเขียนโปรแกรมให้มีการวนไปมาระหว่างlabel ที่ไม่มีวันจบสิ้นเราก็จำเป็นต้องสร้างเงื่อนไขขึ้นมาเพื่อดักทางให้เกมส์สามารถ"สิ้นสุดการวนลูบ" ได้(ไม่งั้นก็เล่นไปจนตายมันก็วนกลับที่เดิมไปเรื่อยๆ ไม่จบสักที)โดยเงื่อนไขดังกล่าว จะเขียนในรูปแบบนี้ค่ะ (แล้วแต่จะนำไปประยุกต์ใช้)
- if day == 30: #<<----ถ้าวันที่ = 30 ให้ทำตามคำสั่งด้านล่าง
- return #<<----สั่งให้จบเกมส์ (กลับไปที่หน้า main menu)
- else: #<<--- ถ้ายังไม่ถึงวันที่ 30
- $ day += 1 #<<---ขึ้นวันใหม่( date = date + 1)
- jump Morning #<<---กลับไปที่ label Morning ซ้ำใหม่อีกครั้ง
คัดลอกไปที่คลิปบอร์ด .....ตัวอย่างการเขียนโค๊ดดังที่กล่าวมาข้างต้นทั้งหมดก็จะประมาณนี้ค่ะ
(คลิกที่ภาพเพื่อดูแบบขนาดเต็ม)
(***ในตัวอย่างข้างบนนี้ข้าพเจ้ากำหนดให้วนลูบแค่ 2 รอบพอ ถ้ากำหนดให้ครบ 30 รอบ (30วัน)ล่ะก็ เทสโปรแกรมเหนื่อยแย่ คลิกเม้าส์มือหงิก
และอีกเรื่องที่ค้างไว้คือ การสร้างเงื่อนไขให้แต่ละช่วงเวลานั้นๆ ของแต่ละวันมีความแตกต่างกันออกไปบ้างตามแต่สถานการณ์ หรือแล้วแต่เหตุการณ์การเขียนโค๊ดก็จะประมาณนี้ค่ะ
ข้าพเจ้ายกตัวอย่างเหตุการณ์ที่มีโอกาสที่จะขึ้นในช่วงเวลาเช้าของแต่ละวันโดยใช้ตัวเลข "วันที่"มาเป็นตัวกำหนดเหตุการณ์ที่ตัวละครหลักจะต้องประสบ เมื่อถึงเวลาและช่วงเวลาที่กำหนด
- label Morning: #กิจกรรมที่เกิดขึ้นในตอนเช้า
- scene black
- show viccha2 with dissolve
- if day == 2: #ถ้าวันที่ = 2 ให้ทำตามเงื่อนไขดังนี้
- jump meet_kawii
-
- if day == 5: #ถ้าวันที่ = 5 ให้ทำตามเงื่อนไขดังนี้
- jump meet_kawii_at_classroom
- if day == 12: #ถ้าวันที่ = 12 ให้ทำตามเงื่อนไขดังนี้
- jump meet_karin
- else: #ถ้าวันที่ ไม่เท่ากับ 2,5,12 ให้ทำตามคำสั่งดังต่อไปนี้
- b "ใส่เนื้อเรื่องปกติประจำวันที่เกิดขึ้นช่วงเช้า....................."
- jump Afternoon <---กระโดดไปที่ label ตอนบ่าย
คัดลอกไปที่คลิปบอร์ด
ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^" ******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)
|