|
แก้ไขครั้งสุดท้ายโดย nooknazha เมื่อ 2018-6-29 23:13
[Renpy] 53. วิธีทำ Imagemap ภายในเกมส์
Imagemap ก็คือการนำภาพสกุล .gif .png หรือ .jpg มากำหนดพิกัดตามตำแหน่งต่างๆภายใน เพื่อให้เกิดเงื่อนไขผลลัพธ์ต่างๆ เมื่อเอาเม้าส์ไปวาง หรือคลิก
การทำ Imagemap ของโปรแกรม Renpy จะมีหลายส่วนด้วยกัน ตัวอย่างเช่น ทำกรอบสนทนา ทำเมนู ปุ่มต่างๆรวมไปถึงหน้าจอสำหรับปรับแต่งค่า options ต่างๆภายในเกมส์ฯลฯ
สำหรับบทความนี้ข้าพเจ้าแนะนำวิธีทำ Imagemap สำหรับสร้างเงื่อนไขต่างขณะดำเนินเกมส์ซึ่งจะทำหน้าที่คล้ายๆ "เมนูทางเลือก" ที่ข้าพเจ้าเคยแนะนำวิธีทำไปแล้วในบทความ[renpy] การสร้างเมนูทางเลือกแต่การ Imagemap จะเพิ่มความน่าสนใจได้มากกว่าการถาม-ตอบแบบทั่วไปค่ะเพราะนอกจากเราจะได้เห็นภาพตัวเลือกแล้ว เรายังออกแบบหน้าจอของทางเลือกนั้นๆได้อย่างอิสระตามต้องการ
ขั้นตอนที่1 เตรียมภาพปกติและภาพเมื่อนำภาพมาวางทับ ขนาด 800*600 pt หรือตามขนาดหน้าจอเกมส์ที่เรากำหนดไว้
ด้านล่างนี้เป็นภาพแบบปกติซึ่งก็คือภาพในขณะที่ยังไม่มีการนำเม้าส์มาวางทับ ข้าพเจ้าบันทึกภาพนี้ชื่อว่าGround.jpg
และให้สร้างอีกภาพ สำหรับเป็นภาพเหตุการณ์เมื่อมีเม้าส์เลื่อนมาวางทับข้าพเจ้าบันทึกภาพนี้ชื่อว่าHover.jpg
ขั้นตอนที่ 2 โค๊ดคำสั่ง
ขณะทำการกำหนดพิกัดภาพเพื่อไม่ให้โปรแกรมดึงไฟล์ที่จับไว้ของใหม่มาปะปนกับไฟล์ใหม่เมื่อทำการแก้ไขให้เปิดไฟล์ Options.rpy ขึ้นมาและแก้ให้ config.developer = False เพื่อไม่ให้โปรแกรมสร้างแฟ้มชื่อ"cache" ขึ้นมาเพื่อบันทึกพิกัดของภาพเก่าไว้และนำมาประมวลผลร่วมกับพิกัดใหม่ (ตรงนี้ข้าพเจ้าจะอธิบายไว้ในตอนท้ายๆนะค่ะเอาเป็นว่ากำหนดให้ config.developer = False ไปก่อน )
สำหรับคนที่ไม่รู้ว่า config.developer = False คือคำสั่งอะไรให้ศึกษาจากบทความนี้ก่อนค่ะ [renpy] การพับลิชไฟล์และซ่อนไฟล์หลังพับลิช
ขั้นตอนที่ 3 โค๊ดคำสั่งสำหรับ map ภาพ
วิธีพิมพ์โค๊ดคำสั่งในไฟล์ Script.rpy มันมีหลายแบบแล้วแต่จะพลิกแพลง ถ้าเป็นแบบมาตรฐานทั่วไป คำสั่งแบบแรก
Code:
- $ result = renpy.imagemap("ground.jpg", "hover.jpg", [
- (8, 200, 86, 278, "swim"),
- (204, 50, 282, 128, "science"),
- (452, 79, 530, 157, "art"),
- (602, 316, 680, 394, "go home"),
- ], focus="imagemap")
- if result == "swim":
- e "You picked swimming!"
- elif result == "science":
- e "You picked science!"
- elif result == "art":
- e "You picked art!"
คัดลอกไปที่คลิปบอร์ดและ คำสั่งแบบที่สอง
Code:
- screen example_imagemap:
- imagemap:
- ground "Ground.jpg" #ชื่อภาพแบบปกติ
- hover "Hover.jpg" #ชื่อภาพเมื่อเอาเม้าส์วางทับ
- #คำสั่งเซ็ตพิกัด hotspot (x(แนวตั้ง), y(แนวนอน), w(ความกว้่าง), h(ความสูง)) clicked Return("วิ่งไปที่...")
- hotspot (8, 200, 78, 78) clicked Return("swim")
- hotspot (204, 50, 78, 78) clicked Return("science")
- hotspot (452, 79, 78, 78) clicked Return("art")
- hotspot (602, 316, 78, 78) clicked Return("go home")
-
- label example:
-
- call screen example_imagemap
-
- $ result = _return
-
- if result == "swim":
- e "You picked swimming!"
- elif result == "science":
- e "You picked science!"
- elif result == "art":
- e "You picked art!"
- elif result == "go home":
- e "You went home!"
- return
คัดลอกไปที่คลิปบอร์ด เอาเป็นว่าแล้วแต่ความชอบนะค่ะ
ขั้นตอนที่ 4 หาพิกัดให้ภาพ map (ใช้โปรแกรมPhotoshop)
เมื่อรู้โค๊ดคำสั่งแล้ว สิ่งที่ต้องทำต่อไปคือหาพิกัดของ Imagemapแต่ละตำแหน่ง
ที่โค๊ดคำสั่งข้างต้น เราจะเห็นตัวเลขเรียงกัน 4 กลุ่ม ซึ่งก็แปลได้ว่า พิกัดที่ แกน (X), แกน(Y), ความกว้างของตำแหน่งนั้นๆ(W), ความสูงของตำแหน่งนั้นๆ(H)
เมื่อเข้าใจความหมายแล้ว ก็ให้นำภาพ Hover.jpg มาเปิดในโปรแกรม Adobe Photoshop
หลังจากได้ภาพทั้งสองมาแล้ว ให้เปิดโปรแกรม Photoshop ขึ้นมาค่ะ
คลิกที่เครื่องมือ Slice Tool (เป็นเครื่องมือที่ใช้ในการตัดภาพออกเป็นชิ้นๆ เพื่อนำไปใช้ในงานเว็บ หรืองานวางโครงสร้างภาพ)
ใช้เครื่องมือ Slice Tool คลิกไปที่มุมใดมุมหนึ่งแล้วแดรกเม้าส์กำหนดอาณาเขต "ภาคเหนือ" ที่จะให้แสดงเมื่อเม้าส์วางทับ
จากนั้นให้ ดับเบิ้ลคลิกภาพที่ตัด หรือคลิกขวาที่ภาพ และเลือกคำสั่ง "Edit Slice Options..."
เมื่อหน้าต่างป๊อบอัพ "Slice Options" แสดงขึ้นมาแล้ว ให้ดูตรงกลุ่มของ "Dimensions"และดูที่ช่องภายในกรอบสีแดงชั้นในเราก็จะได้พิกัดที่แน่นนอนของภาพนั่นคือ แกน (X), แกน(Y),ความกว้างของตำแหน่งนั้นๆ(W), และความสูงของตำแหน่งนั้นๆ(H)
นำค่าที่ได้ไปใส่ในโค๊ดเลยค่ะ :p
แล้วก็กลับมาที่โปรแกรม Photoshop อีกครั้งและให้ใช้ Slice Tool ตัดภาพที่ตำแหน่งต่อไป "ภาคอีสาน"
แล้วก็ดับเบิ้ลคลิกที่ภาพที่ตัด เพื่อให้หน้าต่าง "Slice Options" เด้งขึ้นมา
แล้วก็ให้นำค่าที่ได้ไปใส่ในโค๊ด บรรทัดต่อมา
ภาพไหนที่เราต้องการให้แสดงเมื่อเม้าส์วางทับ ก็ตัดให้ครบเลยนะค่ะ
แล้วก็นำตัวเลขที่ได้จาก "Slice Options" มาใส่ให้หมดทุกตำแหน่ง
ขั้นตอนที่ 5 ตั้งเงื่อนไขเมื่อคลิกแต่ละทางเลือก
ในขั้นตอนนี้ เราสามารถแทรกคำสั่งต่างๆ ลงไปได้หลายแบบ เช่นการให้คะแนน มินิเกมส์ หรือเพิ่มโอกาสที่จะทำให้เกิดเหตุการณ์พิเศษต่างๆ ในเกมส์สิ่งต่างๆเหล่านี้ ถ้าขยันก็จะทยอยทำบทความสอนให้ค่ะแต่ตอนนี้เอาเป็นเหตุการณ์ง่ายๆอย่างการสนทนาทั่วไปก่อน
ตัวอย่าง การเขียนโค๊ด และเขียนผลลัพธ์ของแต่ละทางเลือก
เสร็จแล้วก็บันทึกไฟล์ Script.rpy และ รันโปรแกรมเลยค่ะ
หลังจาก Start Game โผล่มาหน้าแรก ขึ้น Imagemapก่อนเลย ให้สังเกตว่าเมื่อเลื่อนเม้าส์ไปวางทับบนตำแหน่งที่เรากำหนดพิกัดไว้ภาพตรงบริเวณนั้นก็จะแสดงเป็นภาพสี (Hover.jpg )และมีคำอธิบายโชว์ขึ้นมา
สมมุติว่าลองคลิกเลือก "ภาคใต้" โปรแกรมก็จะแสดงมาตามนี้ค่ะ
จบคำสั่ง โปรแกรมก็จะ Jump มาที่ label next ตามที่เรากำหนดไว้ดังภาพด้านล่าง
การ Imagemap สามารถนำมาประยุกต์ใช้ได้กับหลากหลายลูกเล่นนะค่ะสมมุติว่า เป็นเกมส์ที่ตัวละครต่างๆมีกิจกรรมร่วมกันภายในโรงเรียน Imagemapก็อาจจะออกแบบให้สอดคล้องกับกิจกรรมต่างๆที่เกิดขึ้นภายในโรงเรียน..
จบแล้วนะค่ะ สำหรับการทำภาพ Imagemap เพื่อสร้างความน่าสนใจให้กับเกมส์ต่อไปที่ติดไว้เรื่อง config.developer = False ถ้าเรากำหนดให้เป็นTrue หลังจากเราทำการรันเกมส์ โปรแกรม renpyจะทำการสร้างแฟ้มไฟล์ชื่อ "cache" (ดูภาพประกอบด้านล่าง)เพื่อบันทึกตำแหน่งพิกัดและความกว้างยาวของ Imagemap เป็นสกุล.png เพื่อใช้ในการรันโปรแกรมในครั้งต่อๆไปแน่นอนว่าถ้าเราบันทึกพิกัดครั้งแรกผิดมันก็จะเอาอันผิดครั้งแรกมารันในครั้งต่อๆไปด้วย
ข้อดีคือ หากพิกัดทุกอย่างถูกต้อง ในการรันโปรแกรมครั้งแรกเมื่อเราทำการรันโปรแกรมครั้งต่อๆไปจะประมวลผลได้อย่างรวดเร็ว
ข้อเสียคือ หากครั้งแรกเราเซ็ตพิกัดไว้ผิด และต้องการแก้ไขเพิ่มเติมมันจะทำให้ตำแหน่งพิกัดเพี้ยนไปจากความเป็นจริง
เพื่อให้การทำงานเป็นไปอย่างราบรื่น เราควรกำหนดให้เป็น False ก่อนและเมื่อหลังจากเซ็ตตำแหน่งพิกัดที่แน่นอนเสร็จแล้ว ไม่มีอะไรผิดพลาดก็ค่อยมากำหนดให้เป็น True ในตอนหลัง (ถ้าต้องการ)
ขอให้สนุกกับการสร้างเกมส์นะค่ะ^^" ******************************
บทความโดย นุ้ก
ขอจบบทความแค่เพียงเท่านี้ แล้วพบกันใหม่บทความหน้าค่ะ ^^
(ขอสงวนสิทธิ์อนุญาตให้เผยแพร่เฉพาะในเว็บ www.graphicfufu.comเท่านั้น)
|
|