[GML]คำสั่งตรวจสอบปุ่มกด - Printable Version +- irpg Community (https://irpg.in.th) +-- Forum: irpg Fabella Game Maker Academia (https://irpg.in.th/forum-29.html) +--- Forum: The Great Game Maker Library (https://irpg.in.th/forum-31.html) +--- Thread: [GML]คำสั่งตรวจสอบปุ่มกด (/thread-714.html) |
[GML]คำสั่งตรวจสอบปุ่มกด - gol-a-khung - 10-30-2012 สวัสดีครับ ผมโกลเอ้คุง นักสร้างเกมส์รุ่นฝึกหัด วันนี้ขอเอาความรู้ที่ฝึกมาถ่ายทอดให้เข้าใจกันครับ คำสั่งตรวจสอบปุ่มกด คำสั่งที่ผมใช้มีอยู่ตามนี้ครับ keyboard_check(key) คำสั่งนี้มีไว้ตรวจสอบการกดปุ่ม เช่น มีการกดปุ่มที่ต้องการไว้หรือไม่ keyboard_check_pressed(key) คำสั่งนี้จะตรวจสอบครั้งเดียวตอนกดปุ่มลงไปเท่านั้นครับ keyboard_check_released(key) ส่วนคำสั่งนี้ไว้ตรวจสอบการปล่อยปุ่ม ย้ำนะครับ ปล่อยปุ่ม ตรวจสอบครั้งเดียวเท่านั้นครับ มาดูรูปแบบการใช้งานกันครับ โดยปรกติแล้วผมจะใช้แค่ keyboard_check(key) เท่านั้นในการทำให้วัตถุเคลื่อนที่ key ในที่นี้ก็คือปุ่มบนแป้นพิมพ์ครับ โดยมีค่า vk นำหน้า เช่น ถ้าจะกดลูกศรซ้าย จะได้ vk_left หรือถ้าจะกดลูกศรขวา ก็จะได้ vk_right และถ้าเราอยากใช้ ตัวอักษรเป็นตัวกำหนดการกดปุ่ม จะใช้ ord นำหน้าครับ เช่น ต้องการกดปุ่ม Z จะได้ ord('Z') ครับ ข้อควรจำ vk_key << ใช้สำหรับกำหนดค่าที่ไม่ใช้ตัวอักษร ord('key') << ใช้สำหรับกำหนดค่าที่เป็นตัวอักษร รูปแบบคำสั่ง คำสั่งนี้จะอยู่ใน วัตถุที่ใช้ในการควบคุม เช่น ตัวละครหลัก เป็นต้น จะใส่ไว้ที่ หน้าต่าง Events: Step นะครับ ที่ใช้ step เพราะจะให้ตรวจสอบคำสั่งตลอดการเล่นเกมส์ครับ เริ่มจากโจทย์ก่อนครับ ต้องการให้วัตถุเคลื่อนที่ไปทางขวา ที่ละ 5 พิกเซล โดยกดปุ่มลูกศรขวา เริ่มจากใช้ if เป็นการตั้งคำถามให้คำสั่ง if keyboard_check (vk_right) { x += 5 ; } สงสัยไหมครับว่าทำไมต้อง += 5 ก็เพราะว่า ถ้าเราใช้ x =+ 5 นั้นหมายความว่า จำนวนเต็มบวก 5 ไปแทนค่า ใน x ทำให้วัตถุ เคลื่อนที่ไปตำแหน่งเดียว แต่ถ้าเป็น x += 5 แปลได้ว่า 5 + 5 นั้นก็คือ การบวกขึ้นไปเรื่อยๆ ทำให้วัตถุเคลื่อนที่ครับ วัตถุจะเริ่มเคลื่อยที่จาก 5 ไป 10 ไป 15 20 .. . . . . . n ครับ แล้วถ้าเป็น เคลื่อนที่ไปด้านซ้ายละครับ ใช้คำสั่งเดิมครับเปลี่ยนจาก right เป็น left แล้วอย่าลืม ใช้ -=5 นะครับ if keyboard_check (vk_left) { x -= 5 ; } เคลื่อนที่ไปด้านบน if keyboard_check (vk_up) { y -= 5 ; } เคลื่อนที่ลงล่าง if keyboard_check (vk_down) { y += 5 ; } สังเกตุไหมครับว่าทำไมขึ้นบนต้องเป็น ติดค่าลบ ลงล่าง ทำไมเป็นค่า บวก ตรงนี้ต้องทำความเข้าใจจุดกำเนิดพิกเซลก่อนครับ หน้าจอของโปรแกรม game maker มีจุดกำเนิดพิกเซลที่ มุมซ้ายบน ย้ำนะครับ มุมซ้ายบน เป็นสิ่งที่ควรจำเลยละครับ แล้วถ้าไม่อยากใช้ลูกศรละ ใช้ตัวอักษรกำหนดได้ไหม ? ไม่มีปัญหาครับ อยากใช้การเคลื่อนที่แบบเกมส์พวกแนวยิงต่างๆ ที่ใช้ WSAD ในการเคลื่อนที่ จะเขียนคำสั่งได้ดังนี้ if keyboard_check (ord('D')) << เคลื่อนที่ไปขวา { x += 5 ; } if keyboard_check (ord('A')) << เคลื่อนที่ไปซ้าย { x -= 5 ; } if keyboard_check (ord('W')) << เคลื่อนที่ขึ้นบน { y -= 5 ; } if keyboard_check (ord('S')) << เคลื่อนที่ลงล่าง { y += 5 ; } ข้อควรจำ การกำหนดตัวอักษรต้องใช้ตัวพิมพ์ใหญ่นะครับ เช่น A B C D E F G พี่ๆ แล้ว else หายไปไหน อันที่จริงคำสั่งที่ใช้ต้องการค่าที่เป็นจริง ดังนั้นไม่จำเป็นต้องใช้ค่าที่เป็นเท็จ นะครับผม แล้วคำสั่ง keyboard_check_pressed(key) ใช้อย่างไร? ส่วนใหญ่ที่ใช้ก็จะเป็นการตรวจสอบปุ่มกดครั้งเดียว เช่น ใช้การยิงลูกกระสุนปืน ถ้าต้องการให้ลูกปืนที่ยิง ออกเพียงนัดเดียวก็ต้องใช้ คำสั่งนี้ครับ แล้วทำไมไม่ใช้ keyboard_check(key)ละครับ? ใช้ได้ครับ แต่ผลที่ได้จะทำให้กระสุดออกมาเป็นสายน้ำไม่หยุดในขณะกดเลยครับ เพราะว่ามันตรวจสอบการกดตลอด แต่ถ้า ต้องการให้กระสุนออกมาไม่หยุดก็สามารถใช้ได้เลยไม่มีปัญหา ตัวอย่างคำสั่ง keyboard_check_pressed(ord('z')) { ให้ยิงวัตถุไปข้างหน้า ; } แล้วคำสั่ง keyboard_check_released(key)ใช้อย่างไร? คำสั่งนี้ใช้ตรงข้ามกับ keyboard_check_pressed(key)นั้นคือการตรวจสอบตอนปล่อยปุ่มกดครับ ส่วนใหญ่ใช้คู่กับ keyboard_check(key)เพราะต้องการให้เหตุการณ์ที่กระทำอยู่ หยุดกระทำ เช่น ในคำสั่ง keyboard_check(key)สั่งให้เคลื่อนที่ไปเรื่อยๆ และใช้ keyboard_check_released(key) เป็นการแทนค่าหยุดคำสั่ง ตัวอย่างคำสั่ง keyboard_check_released(vk_up) { ให้วัตถุ A หยุดการเคลื่อนที่ ; } ขอบคุณที่อ่านจนถึง ณ ตอนนี้ครับ แสดงว่า คุณสนใจที่จะศึกษา GML จริงๆ มาช่วยผมเถอะนะครับ ศึกษาคนเดียวมันเหงา. . . . . RE: [GML]คำสั่งตรวจสอบปุ่มกด - neozalord - 10-30-2012 เยี่ยมครับ RE: [GML]คำสั่งตรวจสอบปุ่มกด - shogun - 10-07-2014 แล้วเช็คเม้าส์ทำยังไง RE: [GML]คำสั่งตรวจสอบปุ่มกด - gol-a-khung - 06-26-2015 คำสั่ง mouse_button คำสั่งตรวจสอบค่า mouse_check_button คำสั่งตรวจสอบการกดค้าง mouse_check_button_pressed คำสั่งตรวจสอบการกดลง 1 ครั้ง mouse_check_button_released คำสั่งตรวจสอบการปล่อย 1 ครั้ง mouse_clear คำสั่งการคืนค่าต่างๆ ในการกดเมาส์ mouse_last_button คำสั่งตรวจสอบค่าล่าสุดของการกดเมาส์ mouse_wheel_up คำสั่งตรวจสอบล้อกลิ้งขึ้น mouse_wheel_down คำสั่งตรวจสอบล้อกลิ้งลง mouse_x ตำแหน่งเมาส์แนวแกน X mouse_y ตำแหน่งเมาส์แนวแกน Y ค่าที่ใช้คู่กับคำสั่ง mb_left คือ ปุ่มกดด้านซ้ายของเมาส์ (คลิ๊กซ้าย) mb_middle คือ ปุ่มกดตรงกลางของเมาส์ (บริเวณล้อกลิ้งสามารถกดลงไปได้) mb_right คือ ปุ่มกดด้านขวาของเมาส์ (คลิ๊กขวา) mb_none คือ ไม่มีการกดปุ่มใดๆ mb_any คือ มีการกดปุ่มใดปุ่มหนึ่ง ขออภัยครับพอดีพึ่งมาเห็นคำตอบ แล้วก็ติดทำงานด้วยครับเลยอธิบายคลาวๆ ก่อนนะครับ |