แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-29 22:07
[Renpy] 48. วิธี Lock คลิกเม้าส์ขวา และ Locksave
การล๊อค"คลิกเม้าส์ขวา"ขณะผู้เล่น เล่นเกมส์ก็คือการป้องกันไม่ให้ผู้เล่นเรียกใช้งานหน้า Menu - load, save, prefs, etc ได้ในทุกช่วงของเกมส์
เราได้เกริ่นไว้ก่อนแล้วว่าผู้เล่นสามารถใช้เม้าส์ในการเล่นเกมส์ได้ 4 แบบคือ
1. คลิกซ้าย = เป็นการไปยังบทสนทนาต่อไป และใช้คลิกเลือกเมนูต่างๆในเกมส์
2. คลิกขวา = เป็นกดคีย์ลัด สำหรับเรียกหน้าจอ Save/Load อัตโนมัติ
3. การเลื่อนลูกกลิ้งเม้าส์ขึ้น =เป็นการย้อนกลับไปยังประโยคสนทนาก่อนหน้า หรือช้อยคำถามก่อนหน้า และ
4. การเลื่อนลูกกลิ้งเม้าส์ลง =เป็นการเลื่อนกลับมายังข้อความปัจจุบัน ที่ผู้เล่นๆถึง
ในการป้องกันมาเลื่อนลูกกลิ้งเม้าส์ขึ้นลงเพื่อให้ผุ้เล่นสามารถย้อนกลับไปอ่านหรือเลือกคำถามซ้ำใหม่ได้ ข้าพเจ้าแนะนำวิธี Lock ให้แล้วในบทความข้างต้น
การป้องกันไม่ให้ผู้เล่น "คลิกเม้าส์ขวาและการกดปุ่ม Esc" ได้ หลักๆก็คือการป้องกัน ไม่ให้ผู้เล่นกด save ได้เรื่อยๆ ในทุกช่วงของเกมส์ เรามาดูวิธี lock Right-Click และ Esc Button ในไฟล์ script.rpy กันค่ะ
1. Lock การคลิกเม้าส์ขวา และกดปุ่ม ESC โดยให้นำโค๊ดนี้ไปที่ต่อท้ายของ Label start: - $_game_menu_screen = None
คัดลอกไปที่คลิปบอร์ด<----หลังจากใส่โค๊ดนี้แล้ว ทุกบทสนทนาภายในเกมส์ renpy ผู้เล่นจะไม่สามารถคลิกเม้าส์ขวาและกดปุ่ม Esc ได้
ตัวอย่าง...
- label start:
-
- $_game_menu_screen = None #<-------------------- "ปิด" การใช้งานปุ่ม Esc และคลิกเม้าส์ขวา
-
- show viccha01
- v "Hello World"
- return
คัดลอกไปที่คลิปบอร์ด2. และถ้าคุณต้องการอนุญาติให้ช่วงใดที่ผู้เล่นสามารถคลิกเม้าส์ขวา และกดปุ่ม Esc ได้ก็อีกครั้งก็ให้ใส่โค๊ดด้านล่างนี้ลงไปในช่วงที่อนุญาติค่ะ
- $_game_menu_screen = "save_screen"
คัดลอกไปที่คลิปบอร์ด3. ในกรณีที่คุณสร้าง Label ไว้สำหรับใช้ถามผู้เล่นว่าต้องการบันทึกเกมส์หรือไม่โค๊ดด้านล่างจะทำให้เมื่อผู้เล่นทำการคลิกเม้าส์ขวา (ในช่วงที่เปิดอนุญาต)โปรแกรมก็จะวิ่งไปที่ label นั้นๆ แทนที่จะวิ่งไปหน้า Save/Load - $_game_menu_screen = "custom_screen"
คัดลอกไปที่คลิปบอร์ด<---- "custom_screen" คือชื่อที่คุณตั้งให้กับ Labelของคุณเอง (จะตั้งเป็นชื่ออะไรก็ได้)
แต่จากโค๊ดคำสั่งข้างต้น เราจะเห็นว่าถึงแม้ว่าจะใส่โค๊ดป้องกันการคลิกเม้าส์ขวาแล้ว แต่ Quick Menu ก็ยังแสดงอยู่ที่ด้านล่างขวาของช่องสนทนาอยู่ดี(ดูภาพด้านล่าง)
------------------------------------------------------------------------------
ในกรณีที่ผู้สร้างเกมส์ต้องการกำหนดให้ผู้เล่นสามารถบันทึกเกมส์ได้เฉพาะช่วงเวลาที่กำหนดเท่านั้น (No Use Quick Menu) เราสามารถทำได้นังนี้ค่ะ (แล้วแต่ว่าใครจะประยุกต์แบบไหน มันไม่มีโค๊ดแบบตายตัว)
ขั้นตอนที่1 No Use QuickMenu
- ให้เปิดไฟล์ screens.rpyขึ้นมาและดูในส่วนของกรอบสนทนา "Say" ที่โค๊ดด้านล่างสุดเราจะเห็นคำสั่ง "use quick_menu" ให้เอาเครื่องหมาย "#" ไปใส่ข้างหน้ามันไว้ซะแค่นี้ Quick Menu ก็แสดงที่กรอบสนทนาไม่ได้แล้วค่ะ
เมื่อบันทึกโปรแกรม และลองรันเกมส์ดูจะเห็นว่าไม่มี Quick Menu แสดงอยู่แล้ว
ขั้นตอนที่ 2 เตรียมภาพ
เมื่อหน้าเกมส์ไม่มีปุ่มกด Save ใดๆให้ผู้เล่นแถมผู้สร้างเกมส์ยังล๊อคการคลิกเม้าส์ขวาไว้มันก็เท่ากับว่าผู้เล่นจะไม่มีโอกาสบันทึกเกมส์ได้เลยตั้งแต่ต้นจนจบเกมส์แน่นอนค่ะว่าเราไม่ต้องการให้มันเป็นแบบนั้นด้วยเหตุนี้เราจึงจำเป็นต้องสร้างหน้าสำหรับ Save เกมส์แยกขึ้นมาต่างหากเมื่อผู้เล่น เล่นเกมส์ถึงช่วงเวลาที่กำหนด หน้า Save เกมส์ก็จะแสดงขึ้นมาให้ค่ะ
การออกแบบโครงสร้างเกมส์ และหน้าต่างในเกมส์ โค๊ดจะไม่ตายตัวค่ะมันแล้วแต่เราจะเอามาประยุกต์
และสิ่งที่เราจะต้องเตรียมสำหรับใช้สร้างหน้า Save ก็คือภาพต่างๆดังนี้ค่ะ
2.1. ภาพพื้นหลังบอกแต่ละช่วงของเกมส์ ตรงนี้จะไม่มีความสำคัญอะไรจะสร้างหรือไม่สร้างไว้ก็ได้ เพราะเป็นเพียงภาพไตเติ้ลที่บอกให้ผู้เล่นรู้ว่าสู่มาเนื้อเรื่องช่วงไหน ตอนที่เท่าไหร่ของเกมส์แล้ว
(หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
2.2. ภาพพื้นหลัง ของหน้า "Save" ภาพนี้จำเป็นต้องมีแน่ๆ ในภาพจะเห็นข้าพเจ้าทำปุ่ม save แปะติดกับภาพไปเลย
- ภาพนี้นอกจากจะใช้เป็นพื้นหลังแล้ว ยังใช้บอกให้ผู้เล่นรู้ว่าจบเนื้อเรื่องช่วงไหนของเกมส์แล้ว (ถ้าในเกมส์เรามีหลายตอนด้วยกันก็ควรสร้างไว้หลายๆหน้าตามจำนวน แต่ละตอนของเกมส์)
(ภาพนี้ตั้งชื่อไว้ว่า save_chapter_1.png ) (หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
2.3. ภาพปุ่มที่จะเปลี่ยนสีเมื่อมีเม้าส์เลื่อนมาวางทับภาพนี้ก็ควรจะทำไว้ด้วยเหมือนกัน (*แต่ในกรณีที่ผู้สร้างเกมส์"ไม่ต้องการให้มีปุ่มกด" คือให้เป็นภาพพื้นหลังเรียบๆ (เมื่อผู้เล่นคลิกเม้าส์ลงไปบนภาพนั้นๆ ) เกมส์ก็จะบันทึกให้อัตโนมัติทันทีในกรณีหลัง ภาพข้อ 3 ก็ไม่จำเป็นต้องมีก็ได้)
(ภาพนี้ตั้งชื่อไว้ว่า save_chapter_1_hover.png)(หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
ขั้นตอนที่ 3 สร้างหน้า Screen Save
- ให้สร้างไฟล์ขึ้้นใหม่(เปิดโปรแกรม JEdit และไปที่คำสั่ง File >New)
- แล้วให้นำโค๊ดด้านล่างนี้ไปใส่ (โค๊ดไม่ตายตัว แล้วแต่จะประยุกต์)
(จากโค๊ดด้านล่าง...ภาพสีปุ่มที่จะเปลี่ยนไปเมื่อเลื่อนเม้าส์มาวางทับ(ในข้อ 2.3) ข้าพเจ้าจะใช้ร่วมกับภาพอื่นๆ จะเปลี่ยนภาพก็แต่ข้อ 2.2 อย่างเดียว)
- #___________________________________________________
- ##########:::: save_chapter_1 ::::###############
- screen save_chapter_1:
- imagemap:
- xalign 1.0 yalign 1.0
-
- ground 'cha/save_chapter_1.png'
- hover 'cha/save_chapter_1_hover.png'
-
- hotspot (330, 351, 171, 65) action ( QuickSave() + [ Return() ])
- hotspot (551, 351, 168, 65) action Return()
- #___________________________________________________
- ##########:::: save_chapter_2 ::::###############
- screen save_chapter_2:
- tag menu
- imagemap:
- xalign 1.0 yalign 1.0
-
- ground 'cha/save_chapter_2.png'
- hover 'cha/save_chapter_1_hover.png'
-
- hotspot (330, 351, 171, 65) action ( QuickSave() + [ Return() ])
- hotspot (551, 351, 168, 65) action Return()
- #___________________________________________________
- ##########:::: save_chapter_3 ::::###############
- screen save_chapter_3:
- tag menu
- imagemap:
- xalign 1.0 yalign 1.0
-
- ground 'cha/save_chapter_3.png'
- hover 'cha/save_chapter_1_hover.png'
-
- hotspot (330, 351, 171, 65) action ( QuickSave() + [ Return() ])
- hotspot (551, 351, 168, 65) action Return()
คัดลอกไปที่คลิปบอร์ด - เสร็จแล้วให้บันทึกไฟล์ชื่ออะไรก็ได้ในที่นี้ข้าพเจ้าบันทึกเป็น save_chapter.rpy (*** เวลาตั้งชื่อให้ไฟล์ใหม่จะต้องมี .rpy ต่อท้ายชื่อด้วยทุกครั้งไม่งั้นโปรแกรมจะวิ่งหาโค๊ดไม่เจอ)
(ตัวอย่าง)
ขั้นตอนที่ 4 วางโครงสร้างแต่ละช่วงของเกมส์
- ที่ไฟล์script.rpy ก็จะใส่โค๊ดลงไปประมาณนี้ค่ะ (แล้วแต่จะประยุกต์)
- #--------------------------------[ Character ]------------------------------------------
- init:
- $ v = Character("คาฟรา", color="#00ff2a")
- #-----------------------------[ Image Chapter ]--------------------------------------
- image chapter_1 = "cha/chapter_1.png"
- image chapter_2 = "cha/chapter_2.png"
- image chapter_3 = "cha/chapter_3.png"
- image chapter_4 = "cha/chapter_4.png"
-
- #--------------------------[ Image Scene & Character ]------------------------------
- image bg_map = "cha/bg_map.jpg"
- image kafra1 = "cha/kafra1.png"
-
- #---------------------------------[ Intro Start ]-----------------------------------------
- label start:
- $_game_menu_screen = None #<-------------------- "ปิด" การใช้งานปุ่ม Esc และคลิกเม้าส์ขวา
-
- show kafra1 at right
- v "เกริ่นเนื้อเรื่อง....."
- hide kafra1
- jump chapter1
- return
- #-------------------------[ chapter 1 Start ]---------------------------------------#
- label chapter1:
- scene chapter_1
- show kafra1 at right
- v "เข้าสู่ chapter 1 "
- v "1............................................................................... chapter 1 "
- v "2............................................................................... chapter 1 "
- v "3............................................................................... chapter 1 "
- v " จบ chapter 1 "
- hide kafra1
- call screen save_chapter_1 #<-----จบ chapter_1 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
- jump chapter2
- return
- #-------------------------[ chapter 2 ]---------------------------------------#
- label chapter2:
- scene chapter_2
- show kafra1 at right
- v "เข้าสู่ chapter 2 "
- show kafra1
- v "1............................................................................... chapter 2 "
- v "2............................................................................... chapter 2 "
- v "3............................................................................... chapter 2 "
- v " จบ chapter 2 "
- hide kafra1
- call screen save_chapter_2 #<-----จบ chapter_2 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
- jump chapter3
-
- #----------------------------[ chapter 3 ]-----------------------------------#
- label chapter3:
- scene chapter_3
- show kafra1 at right
- v "เข้าสู่ chapter 3 "
-
- show kafra1
- v "1............................................................................... chapter 3 "
- v "2............................................................................... chapter 3 "
- v "3............................................................................... chapter 3 "
- hide kafra1
- call screen save_chapter_3 #<-----จบ chapter_3 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
- jump chapter4
- return
- #------------------[ chapter 4 End Game ]--------------------------#
- label chapter4:
- scene chapter_4
- show kafra1 at right
- v "เข้าสู่ chapter 4 "
-
- show kafra1
- v "1............................................................................... chapter 4 "
- v "2............................................................................... chapter 4 "
- v "3............................................................................... chapter 4 "
- v " The End Game "
- hide kafra1
- return
คัดลอกไปที่คลิปบอร์ด ประมวลผลลัพธ์จากโค๊ดด้านบน:-
เมื่อผู้เล่นคลิกปุ่ม "Start" ก็จะมาเจอหน้านี้ก่อน(ยังไม่เข้าเนื้อหาหลักของเกมส์)
เสร็จแล้วก็เข้าสู่เนื้อเรื่องเกมส์ตอนที่ 1
คลิกเล่นไปเรื่อยๆ จนจบเนื้อหาตอนที่ 1
โปรแกรมจะวิ่งไปที่หน้า screen save_chapter_1 ที่เราสร้างไว้ทันที ดังภาพด้านล่างค่ะ
เมื่อผู้เล่นคลิกปุ่ม "Save" เกมส์ก็จะวิ่งไปที่เนื้อเรื่องตอนต่อไปของเกมส์ (Chapter2)และถึงผู้เล่นไม่กด "Save" โปรแกรมก็จะไปพาที่เนื้อเรื่องต่อไปให้เช่นกัน)
- ในกรณีทื่ผู้เล่นเลือกคลิกที่ปุ่ม "Save" เกมส์จะวิ่งไปยังเนื้อเรื่องต่อไป และมีสัญลักษณ์แสดงที่ด้านบนซ้ายของเกมส์แสดงว่า"ส่วนนี้ได้ถูกบันทึกไว้เสร็จสมบูรณ์แล้ว"
- แต่ละช่วงของเกมส์ที่ถูกบันทึกไว้ จะมาอยู่ที่หน้า SAVEหลักของเกมส์ค่ะ
ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^"
******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)
|