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


10

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

นี่คือประตูปิด:

ประตูปิด

และประตูเปิด:

ประตูเปิด

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

มีใครพบสถานการณ์ที่คล้ายกัน? ทางออกที่สง่างาม?


2
ระบบการเรียงลำดับของคุณตรวจจับลำดับการจับของกระเบื้องในปัจจุบันอย่างไร
Roy T.

คำตอบ:


4

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


4

สร้างสามสไปร ...

  1. ประตูปิด (เช่นสไปรต์แรกของคุณ) - บล็อกการเคลื่อนไหว
  2. เพียงแค่กรอบ (โพสต์ในกรณีของคุณ) ของประตู แต่ไม่มีประตู - ไม่ปิดกั้นการเคลื่อนไหว
  3. เพียงแค่ประตูในตำแหน่งเปิด - ปิดกั้นการเคลื่อนไหว

เมื่อประตูถูกปิดให้วาดเทพดา 1 และถือเป็น "ตัวบล็อก" เพื่อให้ผู้เล่นไม่สามารถเดินผ่านได้

เมื่อประตูเปิดขึ้นให้แทนที่สไปรต์นั้นด้วย # 2 (แค่เสาประตู) จากนั้นวางเทพดา # 3 (เพียงประตู) ในเซลล์ที่อยู่ติดกันซึ่งประตูจะเข้า

การปิดเป็นเพียงการถอดประตูออกและแทนที่เสาด้วยเสา + ประตูในตำแหน่งปิด

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

ข้อเสียคือคุณไม่สามารถมีผู้เล่นหรือวัตถุอื่น ๆ ในตารางที่ประตูเปิดจะไป


3

มี 2 ​​เทคนิคที่ฉันใช้สำหรับการเรียงลำดับในแบบ 2D:

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

  • เพิ่มเด็กที่ไม่สามารถจัดเรียงให้กับวัตถุได้ (ผู้ชายสามารถมีลูกหลายคนซึ่งไม่มีผลต่อการเรียงลำดับ - เสื้อคลุม, ธนู, ดาบ, ฯลฯ กรอบประตูมีประตูเด็ก) วิธีนี้เป็นภาพเคลื่อนไหวของสไปรต์สำหรับเด็กไม่มีผลต่อการเรียงลำดับเช่นกัน


1

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

แม้ว่าเกมของคุณเป็น 2D, คุณยังควรพิจารณาการใช้ 3D พิกัดกับกันชนลึกมิฉะนั้นคุณจะตลอดไปเต้นแทงโกกับอัลกอริทึมของจิตรกร


จริง แต่จะกำหนดตำแหน่ง Z ได้อย่างไร โดยการเรียงลำดับเท่านั้น
Kromster

ใช่ แต่ตอนนี้การเรียงลำดับนั้นเกิดขึ้นแบบออฟไลน์แทนที่จะอยู่ระหว่างการเรนเดอร์ ตอนนี้ผู้ออกแบบเลเวลสามารถสร้างเลเวลได้โดยคำนึงถึงค่า Z ในใจโดยไม่ต้องกังวลกับการเล็มวัตถุ
knight666
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.