Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Game Maker [GML]คำสั่งตรวจสอบปุ่มกด
#1
สวัสดีครับ ผมโกลเอ้คุง นักสร้างเกมส์รุ่นฝึกหัด
วันนี้ขอเอาความรู้ที่ฝึกมาถ่ายทอดให้เข้าใจกันครับ

คำสั่งตรวจสอบปุ่มกด
คำสั่งที่ผมใช้มีอยู่ตามนี้ครับ
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 จริงๆ มาช่วยผมเถอะนะครับ ศึกษาคนเดียวมันเหงา. . . . .
[-] The following 7 users say Thank You to gol-a-khung for this post:
  • arkman, editorkids, [IRPG] Ghost, neozalord, platou18, slost, นิราจ
Reply
#2
เยี่ยมครับ
Reply
#3
แล้วเช็คเม้าส์ทำยังไง
[-] The following 1 user says Thank You to shogun for this post:
  • gol-a-khung
Reply
#4
คำสั่ง
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 คือ มีการกดปุ่มใดปุ่มหนึ่ง

ขออภัยครับพอดีพึ่งมาเห็นคำตอบ แล้วก็ติดทำงานด้วยครับเลยอธิบายคลาวๆ ก่อนนะครับ
[-] The following 3 users say Thank You to gol-a-khung for this post:
  • arkman, jin, slost
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)