irpg Community

Full Version: อยากทราบ logic สำหรับ sliding แบบ rockman [Classic] ครับ
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
คือผมทำเกม side scrolling คล้ายๆ Rockman อยู่ ซึ่งผมสำเร็จในการศึกษา code ในการทำ action ส่วนใหญ่ เช่นกระโดด วิ่ง วิ่งไปโจมตีไป ได้ ติดอยู่แค่เรื่องเดียวคือพวก action ที่ต้องมีการเช็คความสัมพันธ์ระหว่างขนาดพื้นที่ซึ่งผมดู code มา 10 กว่าเที่ยวแล้วยังจับจุดมันไม่ได้

แนวคิดของผมคือ ถ้าผมสั่งให้ตัวละคร Slide ตัวละครจะออก action slide และเคลื่อนย้ายไปยังตำแหน่งไปเป็นระยะทางตามที่กำหนดเวลาเอาใว้ ok อันนี้ผมเขียนโคดได้ แต่ปัญหาคือผมจะต้องเขียนโคดยังไงเพื่อสั่งตัวละครเคลื่อนย้ายตำแหน่งด้วยท่า slide เป็นระยะทาง infinity เมื่อตัวละครพบว่า collision ที่ตนกำลังเคลื่อนผ่านมีขนาดตามที่กำหนด? เช่น ผ่านช่องแคบที่มีขนาดความสูง 32 ซึ่งหากตัวละครยังไม่พบพื้นที่ที่ใหญ่กว่า 32 ตัวละครจะยังคงสถานะ Sliding ตลอดไป

โคดที่ผมมีตอนนี้ทำงานในลักษณะนี้
เมื่อผู้เล่นกด C------> ตัวละครเปลี่ยงจากท่ายืนเป็น slide ซึ่ง Mask มีความสูงเป็น 50% ของความสูงตัวละครขณะยืนและเคลื่อนที่ด้วยท่านั้นเป็นเวลา 5 วินาที

ปัญหาคือตัวละครสามารถ slide เข้าที่แคบได้แต่เมื่อครบ 5 วินาที ตัวละครจะกลับมาท่ายืนแล้วติดอยู่ในช่องแคบนั้น - -"

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

แต่ผม่ทราบว่าคุณมีแนวคิดที่ฝัง code เช็คขนาดพื้นที่ลงบนตัวละครเลยรึเปล่าเพราะนอกจาก slide แล้วคงมี animation อื่นๆที่ผมยังคาดไม่ถึงอีกที่ต้องใช้ประโยชน์จากการเชคขนาดพื้นที่ ซึ่งหากผมเข้าในหลักการทำงานของ function นี้ได้ผมคงเอามันไปใช้งานได้ในหลายๆ กรณีเพื่อให้ gameplay มีความซับซ้อนมากขึ้น
นึกออกอีกวิธีครับ อันนี้ใส่สคิปที่ออปเจ็กหลักได้เลย แล้วใช้การเช็คชนออปเจ็กที่อยู่ใต้ออปเจ็กหลัก
แนวคิดคือ ถ้ายืนอยู่บนออปเจ็กA(สมมติ) ให้ออปเจ็กหลักสไดล์ไปทิศทางที่ต้องการ เพียงแค่วางออปเจ็กA
ต่อๆ กัน ออปเจ็กหลักก็จะเคลือนที่ไปทิศทางที่ต้องการครับ ไม่รู้ใช้ได้ไหมเป็นการเช็คชนธรรมดาๆ เองครับ
อีกอย่างไม่ต้องเขียนสคิปให้มากมายด้วย แถมที่ออปเจ็กA ก็ไม่ต้องใส่สคิปเลย
แล้วก็ยังมีอีกปัญหานึงคือ Double Jump ซึ่งเมื่อก่อนผมใช้ GM8 มันไม่มีปัญหาเลย แต่พอเปลี่ยนมาใช้ GMS Code เดียวกันกลับมีปัญหา ทั้งๆ ที่ logic มันไม่ได้ซับซ้อนเลย

Logic ของผมคือ เมื่อตัวละครยืนพื้นจะมีตัวแปรเท่ากับ 0 [และจะคิดเป็น 0 เสมอเมื่อตัวละครสัมผัส collision เท่านั้น] เมื่อตัวละครกระโดดจะนับเป็น 1 ซึ่งหากกดกระโดดอีกทีเมื่ออยู่กลางอากาศจะนับเป็น 2 ซึ่งเมื่อตัวแปรเป็น 2 จะกดกระโดดอีกกี่ 10 ทีตัวละครก็จะไม่กระโดดอีกแล้วจนกว่าจะลงพื้นเพื่อเปลี่ยนตัวแปรกลับเป็น 0

แต่หลังจากที่ logic นี้ใช้ใน GMS ไม่ได้ ผมเลยคิดไม่ออกว่าจะใช้มุขใหนแทน = ="