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

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

[Renpy] 48. วิธี Lock คลิกเม้าส์ขวา และ Locksave

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

272

กระทู้

272

โพสต์

979

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

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

Save_Chapter_8.png
[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:
  1. $_game_menu_screen = None
คัดลอกไปที่คลิปบอร์ด
<----หลังจากใส่โค๊ดนี้แล้ว ทุกบทสนทนาภายในเกมส์ renpy ผู้เล่นจะไม่สามารถคลิกเม้าส์ขวาและกดปุ่ม Esc ได้

ตัวอย่าง...

  1. label start:
  2.    
  3.     $_game_menu_screen = None     #<-------------------- "ปิด" การใช้งานปุ่ม Esc และคลิกเม้าส์ขวา
  4.    
  5.     show viccha01
  6.     v "Hello World"
  7. return
คัดลอกไปที่คลิปบอร์ด
2. และถ้าคุณต้องการอนุญาติให้ช่วงใดที่ผู้เล่นสามารถคลิกเม้าส์ขวา และกดปุ่ม Esc ได้ก็อีกครั้งก็ให้ใส่โค๊ดด้านล่างนี้ลงไปในช่วงที่อนุญาติค่ะ
  1. $_game_menu_screen = "save_screen"
คัดลอกไปที่คลิปบอร์ด
3. ในกรณีที่คุณสร้าง Label  ไว้สำหรับใช้ถามผู้เล่นว่าต้องการบันทึกเกมส์หรือไม่โค๊ดด้านล่างจะทำให้เมื่อผู้เล่นทำการคลิกเม้าส์ขวา (ในช่วงที่เปิดอนุญาต)โปรแกรมก็จะวิ่งไปที่ label นั้นๆ แทนที่จะวิ่งไปหน้า Save/Load  
  1. $_game_menu_screen = "custom_screen"
คัดลอกไปที่คลิปบอร์ด
<---- "custom_screen" คือชื่อที่คุณตั้งให้กับ Labelของคุณเอง (จะตั้งเป็นชื่ออะไรก็ได้)

แต่จากโค๊ดคำสั่งข้างต้น เราจะเห็นว่าถึงแม้ว่าจะใส่โค๊ดป้องกันการคลิกเม้าส์ขวาแล้ว แต่ Quick Menu ก็ยังแสดงอยู่ที่ด้านล่างขวาของช่องสนทนาอยู่ดี(ดูภาพด้านล่าง)
Save_Chapter_11.png
------------------------------------------------------------------------------
ในกรณีที่ผู้สร้างเกมส์ต้องการกำหนดให้ผู้เล่นสามารถบันทึกเกมส์ได้เฉพาะช่วงเวลาที่กำหนดเท่านั้น (No Use Quick Menu) เราสามารถทำได้นังนี้ค่ะ (แล้วแต่ว่าใครจะประยุกต์แบบไหน  มันไม่มีโค๊ดแบบตายตัว)

ขั้นตอนที่1  No Use QuickMenu
- ให้เปิดไฟล์ screens.rpyขึ้นมาและดูในส่วนของกรอบสนทนา "Say" ที่โค๊ดด้านล่างสุดเราจะเห็นคำสั่ง "use quick_menu" ให้เอาเครื่องหมาย "#" ไปใส่ข้างหน้ามันไว้ซะแค่นี้ Quick Menu ก็แสดงที่กรอบสนทนาไม่ได้แล้วค่ะ
Save_Chapter_1.png
เมื่อบันทึกโปรแกรม และลองรันเกมส์ดูจะเห็นว่าไม่มี Quick Menu แสดงอยู่แล้ว
Save_Chapter_13.jpg

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

การออกแบบโครงสร้างเกมส์ และหน้าต่างในเกมส์ โค๊ดจะไม่ตายตัวค่ะมันแล้วแต่เราจะเอามาประยุกต์

และสิ่งที่เราจะต้องเตรียมสำหรับใช้สร้างหน้า Save ก็คือภาพต่างๆดังนี้ค่ะ
2.1. ภาพพื้นหลังบอกแต่ละช่วงของเกมส์ ตรงนี้จะไม่มีความสำคัญอะไรจะสร้างหรือไม่สร้างไว้ก็ได้ เพราะเป็นเพียงภาพไตเติ้ลที่บอกให้ผู้เล่นรู้ว่าสู่มาเนื้อเรื่องช่วงไหน ตอนที่เท่าไหร่ของเกมส์แล้ว

(หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
Save_Chapter_2.png
2.2. ภาพพื้นหลัง ของหน้า "Save" ภาพนี้จำเป็นต้องมีแน่ๆ ในภาพจะเห็นข้าพเจ้าทำปุ่ม save แปะติดกับภาพไปเลย
- ภาพนี้นอกจากจะใช้เป็นพื้นหลังแล้ว ยังใช้บอกให้ผู้เล่นรู้ว่าจบเนื้อเรื่องช่วงไหนของเกมส์แล้ว (ถ้าในเกมส์เรามีหลายตอนด้วยกันก็ควรสร้างไว้หลายๆหน้าตามจำนวน แต่ละตอนของเกมส์)

(ภาพนี้ตั้งชื่อไว้ว่า save_chapter_1.png ) (หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
Save_Chapter_3.png

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

(ภาพนี้ตั้งชื่อไว้ว่า  save_chapter_1_hover.png)(หรือจะคลิกขวาเซฟภาพนี้ไปเลยก็ได้ค่ะ)
Save_Chapter_4.png

ขั้นตอนที่ 3 สร้างหน้า Screen Save
- ให้สร้างไฟล์ขึ้้นใหม่(เปิดโปรแกรม JEdit และไปที่คำสั่ง File >New)
- แล้วให้นำโค๊ดด้านล่างนี้ไปใส่ (โค๊ดไม่ตายตัว แล้วแต่จะประยุกต์)  

(จากโค๊ดด้านล่าง...ภาพสีปุ่มที่จะเปลี่ยนไปเมื่อเลื่อนเม้าส์มาวางทับ(ในข้อ 2.3) ข้าพเจ้าจะใช้ร่วมกับภาพอื่นๆ จะเปลี่ยนภาพก็แต่ข้อ 2.2 อย่างเดียว)

  1. #___________________________________________________
  2. ##########::::  save_chapter_1 ::::###############
  3. screen save_chapter_1:
  4.     imagemap:
  5.         xalign 1.0 yalign 1.0
  6.         
  7.         ground 'cha/save_chapter_1.png'
  8.         hover 'cha/save_chapter_1_hover.png'
  9.         
  10.         hotspot (330, 351, 171, 65) action ( QuickSave() + [ Return() ])
  11.         hotspot (551, 351, 168, 65) action Return()
  12. #___________________________________________________
  13. ##########::::  save_chapter_2 ::::###############
  14. screen save_chapter_2:
  15.     tag menu
  16.     imagemap:
  17.         xalign 1.0 yalign 1.0
  18.         
  19.         ground 'cha/save_chapter_2.png'
  20.         hover 'cha/save_chapter_1_hover.png'
  21.         
  22.         hotspot (330, 351, 171, 65) action  ( QuickSave() + [ Return() ])
  23.         hotspot (551, 351, 168, 65) action Return()
  24. #___________________________________________________
  25. ##########::::  save_chapter_3 ::::###############
  26. screen save_chapter_3:
  27.     tag menu
  28.     imagemap:
  29.         xalign 1.0 yalign 1.0
  30.         
  31.         ground 'cha/save_chapter_3.png'
  32.         hover 'cha/save_chapter_1_hover.png'
  33.         
  34.         hotspot (330, 351, 171, 65) action  ( QuickSave() + [ Return() ])
  35.         hotspot (551, 351, 168, 65) action Return()
คัดลอกไปที่คลิปบอร์ด
- เสร็จแล้วให้บันทึกไฟล์ชื่ออะไรก็ได้ในที่นี้ข้าพเจ้าบันทึกเป็น save_chapter.rpy (*** เวลาตั้งชื่อให้ไฟล์ใหม่จะต้องมี .rpy ต่อท้ายชื่อด้วยทุกครั้งไม่งั้นโปรแกรมจะวิ่งหาโค๊ดไม่เจอ)

(ตัวอย่าง)
Save_Chapter_12.png
ขั้นตอนที่ 4 วางโครงสร้างแต่ละช่วงของเกมส์
- ที่ไฟล์script.rpy ก็จะใส่โค๊ดลงไปประมาณนี้ค่ะ (แล้วแต่จะประยุกต์)

  1. #--------------------------------[ Character ]------------------------------------------
  2. init:
  3.     $ v = Character("คาฟรา", color="#00ff2a")
  4. #-----------------------------[ Image Chapter ]--------------------------------------
  5.     image chapter_1 = "cha/chapter_1.png"
  6.     image chapter_2 = "cha/chapter_2.png"
  7.     image chapter_3 = "cha/chapter_3.png"
  8.     image chapter_4 = "cha/chapter_4.png"
  9.    
  10. #--------------------------[ Image Scene & Character ]------------------------------
  11.     image bg_map = "cha/bg_map.jpg"
  12.     image kafra1 = "cha/kafra1.png"
  13.    
  14. #---------------------------------[ Intro Start ]-----------------------------------------
  15. label start:
  16.     $_game_menu_screen = None #<-------------------- "ปิด" การใช้งานปุ่ม Esc และคลิกเม้าส์ขวา
  17.    
  18.     show kafra1 at right
  19.     v "เกริ่นเนื้อเรื่อง....."
  20.     hide kafra1
  21.     jump chapter1
  22. return
  23. #-------------------------[ chapter 1 Start  ]---------------------------------------#
  24. label chapter1:
  25.     scene chapter_1
  26.     show kafra1 at right
  27.     v "เข้าสู่ chapter 1 "
  28.     v "1............................................................................... chapter 1  "
  29.     v "2............................................................................... chapter 1  "
  30.     v "3............................................................................... chapter 1  "
  31.     v " จบ chapter 1 "
  32.     hide kafra1
  33.     call screen save_chapter_1 #<-----จบ chapter_1 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
  34.     jump chapter2

  35. return
  36. #-------------------------[ chapter 2  ]---------------------------------------#
  37. label chapter2:
  38.     scene chapter_2
  39.     show kafra1 at right
  40.     v "เข้าสู่ chapter 2 "
  41.     show kafra1
  42.     v "1............................................................................... chapter 2  "
  43.     v "2............................................................................... chapter 2  "
  44.     v "3............................................................................... chapter 2  "
  45.     v " จบ chapter 2 "
  46.     hide kafra1
  47.     call screen save_chapter_2 #<-----จบ chapter_2 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
  48.     jump chapter3
  49.    
  50. #----------------------------[ chapter 3  ]-----------------------------------#
  51. label chapter3:
  52.     scene chapter_3
  53.     show kafra1 at right
  54.     v "เข้าสู่ chapter 3 "
  55.    
  56.     show kafra1
  57.     v "1............................................................................... chapter 3  "
  58.     v "2............................................................................... chapter 3  "
  59.     v "3............................................................................... chapter 3  "
  60.     hide kafra1
  61.     call screen save_chapter_3 #<-----จบ chapter_3 เรียกหน้าต่างสำหรับให้ผู้เล่น Save เกมส์
  62.     jump chapter4
  63. return
  64. #------------------[ chapter 4 End Game ]--------------------------#
  65. label chapter4:
  66.     scene chapter_4
  67.     show kafra1 at right
  68.     v "เข้าสู่ chapter 4 "
  69.    
  70.     show kafra1
  71.     v "1............................................................................... chapter 4  "
  72.     v "2............................................................................... chapter 4  "
  73.     v "3............................................................................... chapter 4  "
  74.     v " The End Game "
  75.     hide kafra1
  76. return

คัดลอกไปที่คลิปบอร์ด
ประมวลผลลัพธ์จากโค๊ดด้านบน:-
เมื่อผู้เล่นคลิกปุ่ม "Start" ก็จะมาเจอหน้านี้ก่อน(ยังไม่เข้าเนื้อหาหลักของเกมส์)
Save_Chapter_5.png
เสร็จแล้วก็เข้าสู่เนื้อเรื่องเกมส์ตอนที่ 1

Save_Chapter_6.png

คลิกเล่นไปเรื่อยๆ จนจบเนื้อหาตอนที่ 1
Save_Chapter_7.png
โปรแกรมจะวิ่งไปที่หน้า screen save_chapter_1 ที่เราสร้างไว้ทันที ดังภาพด้านล่างค่ะ

Save_Chapter_8.png

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

- ในกรณีทื่ผู้เล่นเลือกคลิกที่ปุ่ม "Save" เกมส์จะวิ่งไปยังเนื้อเรื่องต่อไป และมีสัญลักษณ์แสดงที่ด้านบนซ้ายของเกมส์แสดงว่า"ส่วนนี้ได้ถูกบันทึกไว้เสร็จสมบูรณ์แล้ว"

Save_Chapter_9.png

- แต่ละช่วงของเกมส์ที่ถูกบันทึกไว้ จะมาอยู่ที่หน้า SAVEหลักของเกมส์ค่ะ
Save_Chapter_10.png

ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^"

******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)


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

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

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

GMT+7, 2024-4-26 22:06 , Processed in 0.109035 second(s), 21 queries .

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

© 2001-2017 Comsenz Inc.

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