irpg Community

Full Version: [GML]กำหนดสิ่งกีดขวาง (ผู้เริ่มต้น 2)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
GML
สวัสดีครับ ผมโกลเอ้คุง จากบทความตอนที่แล้วเป็นการกำหนดค่าเคลื่อนที่
[GML]คำสั่งการเคลื่อนที่ (ผู้เริ่มต้น)
ติดตามได้ลิงค์ด้านบนครับ ส่วนในบทนี้จะเป็นการกำหนดสิ่งกีดขวาง

[Image: tst-g-11_zps117b9dd7.gif]

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


ขั้นแรกเปิดไฟล์งานตัวบทสอนของครั้งที่แล้ว
[Image: tst-g-01_zps1611a3d4.gif]

ตามตัวอย่าง ผมได้ทำการรวมไฟล์สไปร์ให้อยู่ในกลุ่มเดียวกัน โดยการคลิ๊กขวาที่ Sprites เลือก Create Group
ทำการตั้งชื่อ ผมใช้ชื่อ boy แล้วกด OK จากนั้นก็ลากไฟล์สไปร์ไปใส่ใน กลุ่มไฟล์ที่เราตั้งขึ้นครับ


ขั้นตอนที่ 2
[Image: tst-g-02_zps2f44f968.gif]

เราจะทำการสร้างสไปร์ขึ้นมาครับ ตั้งชื่อเป็น spr_wall แล้วทำการแก้ไขรูป คลิ๊กที่ EditSprite


ขั้นตอนที่ 3
[Image: tst-g-03_zps9ef38258.gif]

ทำการสร้างงานขึ้นมาใหม่ กำหนดให้ความกว้างxยาว เท่ากับ 16x16 คลิ๊กที่รูปดินสอเข้าไปวาดรูป


ขั้นตอนที่ 4
[Image: tst-g-04_zps567c3ae9.gif]

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


ขั้นตอนที่ 5
[Image: tst-g-05_zps89432b62.gif]

ทำการเพิ่มออปเจ็กต์ ตั้งชื่อเป็น obj_wall เลือก Sprite เป็น spr_wall
แล้วติ๊กเครื่องหมายถูกหน้า Solid


ขั้่นตอนที่ 6
[Image: tst-g-06_zps063a731f.gif]

เพิ่มโค้ดที่ obj_boy ต่อท้ายประโยคเงื่อนไขดังต่อไปนี้
if keyboard_check(vk_up)&&place_free(x,y-5)
if keyboard_check(vk_down)&&place_free(x,y+5)
if keyboard_check(vk_left)&&place_free(x-5,y)
if keyboard_check(vk_right)&&place_free(x+5,y)


ขั้นตอนที่ 7
[Image: tst-g-07_zps618fba9e.gif]

ไปที่ห้องสร้างเกมส์ rm_main ที่แทป objecte ให้เราทำการวางออปเจ็กต์เป็นแนว
กรอบ เพื่อกันไม่ให้ตัวละครหลุดออกนอกแผนที่


ขั้นตอนที่ 8 สำคัญมาก ตั้งใจนะครับน้องๆ
[Image: tst-g-08_zps2f2bdeaa.gif]

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


ขั้นตอนที่ 9
[Image: tst-g-09_zps291c4797.gif]

กำหนดการเดินผ่านของต้นไม้ครับ ผมได้วางบล็อกไว้ที่ตัวต้นไม้ แล้วทำการทดสอบดูว่าสามารถ
วิ่งผ่านได้ไหม ตามตัวอย่างดังภาพที่เห็น


ขั้นตอนสุดท้่าย
[Image: tst-g-10_zps0c504947.gif]

ปรับให้บล็อกมองไม่เห็นเวลาเล่นเกมส์ ไปที่ออปเจ็กต์ obj_wall
นำเครื่องหมายถูกหน้า Visible ออกครับ แล้วทำการทดสอบเกมส์อีกครั้ง
ดังตัวอย่าง


[Image: tst-g-11_zps117b9dd7.gif]

และแล้วก็เสร็จตามความต้องการ

ตัวแปรน่าจดจำ
&&place_free(x,y) ใช้ในการเช็คค่าออปเจ็กต์ไปถึงสิ่งกีดขวาง

ดาวน์โหลดตัวอย่างบทสอน
ไฟล์ตัวอย่างบทสอนที่ 2

ขอบคุณทุกท่านที่เข้ามาชมครับ
บทความ : Gol-a-khung
ผิดพลาดประการใดรีบบอกกันเลยนะครับ จะได้ปรับแก้ให้ถูกต้อง
ผมใช้การสร้างบลอกล่องหนเหมือนกัน แต่เวลาชนใช้คำสั่ง friction แทน แล้วก็เซ็ตตัวเล่นให้เป็น หนสรกfh;pot8iy[