nooknazha โพสต์ 2018-6-29 21:53:51

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

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


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) เราสามารถทำได้นังนี้ค่ะ (แล้วแต่ว่าใครจะประยุกต์แบบไหนมันไม่มีโค๊ดแบบตายตัว)

ขั้นตอนที่1No 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เท่านั้น)

หน้า: [1]
ดูในรูปแบบกติ: [Renpy] 48. วิธี Lock คลิกเม้าส์ขวา และ Locksave