วันอังคารที่ 27 กันยายน พ.ศ. 2559

Construct 2 : ปุ่มเดียว เสียวทุกเมนู


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

อันที่จริงแล้ว การสร้างปุ่มในลักษณะของ family นั่น มีจุดประสงค์เพื่อให้สามารถสั่งงานเมื่อคลิกปุ่มด้วยคำสั่งหรือ event เดียว ให้ครอบคลุมการทำงานของปุ่มทุกปุ่ม แล้วทำไมต้องรวมกลุ่มแต่ละปุ่มแต่ละปุ่มไว้ด้วยกันล่ะ ผมจะยกตัวอย่างให้ดูว่า ถ้าแยก จะต้องเขียนคำสั่งมากขนาดไหน



จะเห็นว่า แต่ละปุ่มก็ต้องใช้คำสั่งควบคุมเฉพาะตัว หากมีปุ่มจำนวนมาก คำสั่งก็จะมากไปด้วย หากใช้ปุ่มแบบ family นั้น จะใช้คำสั่งสำหรับเรียกใช้งานแค่คำสั่งเดียว แต่ผมจะไม่ขอยกตัวอย่างการใช้งานไว้ในบทความนี้ เพราะเรื่องของ family นั้น ไม่ใช่ของฟรี ที่จะใช้งานได้ทั่วไป ผมจึงของนำเสนอวิธีการที่จะใช้ของฟรี แต่ทำให้หรู ดูดีแบบเสียตังค์กัน

สิ่งที่ต้องรู้ก่อนที่จะทำตามเนื้อหาในบทความนี้
1. การทำ sprite แบบ animation คลิกกลับไปอ่านบทความ
2. การใช้งาน function ในโปรแกรม Construct 2  (ค้นหาอ่านจาก google ก่อนนะครับ ยังไม่ได้เขียน)

ลงมือกันเลย
ขั้นแรก ให้รวมเมนูต่าง ๆ เข้าเป็นปุ่มเดียวในลักษณะของ animation ก่อนนะครับ กำหนด speed ของ animation เป็น 0 เพื่อไม่ใช้ animation ของปุ่มทำงาน


นำปุ่มมาวางในหน้าเกม ตามจำนวนปุ่มหรือเมนูที่ต้องการ  และกำหนด instance variable ให้กับปุ่ม เพื่อใช้แสดงภาพ frame ปุ่มตามค่าของ buttonID เปลี่ยนค่าไปเรื่อยๆ ตามหมายเลขของภาพใน frame ของ animation



กำหนดค่าให้แสดงปุ่ม เมื่อเริ่มทำงานทุกครั้งที่ load layout



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



เปลี่ยนค่าของ instance variable ให้เป็นชื่อ function ที่ต้องการเรียกใช้ ตรงตามปุ่มแต่ละปุ่ม

กำหนดคำสั่งสำหรับการทำงาน เมื่อคลิกที่ปุ่มต่าง ๆ ที่เราได้วางไว้ในเกมแล้ว โดยอาศัยการทำงานคุณสมบัติของ Function คือ Function.Call  โดยอาศัยชื่อ function ที่ส่งมาจากค่า instance variable ที่ชื่อ callback



ถ้าปุ่มที่กด เป็นค่า playback การทำงานของ function "callback"  จะไปเรียกใช้งาน function "playback" อีกต่อหนึ่ง



เป็นอันเรียบร้อย เขียนการทำงานของ function ให้ครบทุกปุ่ม แค่นี้ ปุ่มเดียวของเราก็ทำเสียวไปได้ทุกเมนูแล้วครับ ไม่ต้องใช้คุณสมบัติของ family ก็สามารถทำงานได้เช่นเดียวกัน ขอให้สนุกกับการสร้างเกมนะครับ


วันเสาร์ที่ 24 กันยายน พ.ศ. 2559

เปลี่ยนหน้าเกม ตามเวลาที่กำหนด

ในการสร้างเกม บางครั้ง ผู้สร้างเกมก็ต้องการให้แสดงหน้าเกมบางหน้าในเวลาชั่วขณะหนึ่ง แล้วเปลี่ยนหน้าเกมไปอีกหน้าโดยอัตโนมัติ ลักษณะแบบนี้ ส่วนใหญ่จะใช้ทำหน้า loading screens แต่สำหรับโปรแกรม construct 2 มี loading screens เตรียมไว้ให้สำหรับเกมอยู่แล้ว หากไม่ใช่เวอร์ชันฟรี จะสามารถเปลี่ยนแปลงได้  แต่สำหรับคนที่อยากพัฒนาเกมเล่นๆ ไม่ได้จำเป็นต้องซื้อเวอร์ชันเสียตังมาใช้งาน แต่อยากทำหน้า loading screens หรือกำหนดให้หน้าเกมเปลี่ยนแปลงได้อัตโนมัติ

การเปลี่ยนหน้าเกม จะสามารถใช้คุณสมบัติของ Time เพื่อกำหนดเหตุการณ์ในการเปลี่ยนหน้าเกม คุณสมบัติดังกล่าวจะอยู่ในเหตุการณ์ System -> Time และใช้เงื่อนไข Compare time

Compare time  เป็นเงื่อนไขที่ใช้ตรวจสอบเวลา  เปรียบเทียบเวลาที่ต้องการกับเวลาตั้งแต่เริ่มเกม ยกตัวอย่างเช่น เหตุการณ์ที่เกิดขึ้นสามารถตั้งค่าให้ทำงานเมื่อเวลาตั้งแต่เริ่มเกม มาถึง 10 วินาที
หรือใช้เปรียบเทียบการทำงานตามช่วงเวลา โดยอาศัยตัวแปรของ system time

ทดลองสร้างเกมด้วย construct 2 โดยกำหนดให้มีอย่างน้อย 2 layout  โดย layout แรกให้เป็นหน้า loading screens



กำหนดค่าใน Event sheet ดังนี้
System -> Compare time  กำหนดค่าให้ทำงาน เมื่อเวลาผ่านไป 10 วินาที



กำหนดการทำงานเมื่อเวลาผ่านไป 10 วินาที ให้ระบบทำการเปลี่ยนไปยัง layout ต่อไป



เมื่อทดสอบการทำงานของเกม ตัวเกมจะแสดงหน้า layout แรก เป็นเวลา 10 วินาที แล้วจะเปลี่ยนไปยัง layout ถัดไป

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

ลองประยุกต์ใช้งานในหลายๆ แบบ จะทำให้เกมของเรามีความน่าสนใจมากยิ่งขึ้น  ขอให้สนุกกับการสร้างเกมนะครับ