เรือแล่นผ่านใต้สะพานใน RTS ที่อิงกับไทล์ 2 มิติ


10

ฉันกำลังเขียน RTS ที่อิงกับไทล์ และฉันต้องการเพิ่มฟีเจอร์ 'หลอก 3D' ลงไป - เชื่อมข้ามแม่น้ำ

ฉันยังไม่ได้เริ่มการเข้ารหัสใด ๆ เพียงแค่พยายามคิดว่ามันเหมาะกับรูปแบบการตรวจจับการชนกันของข้อมูลอย่างไร เรือแล่นผ่านใต้สะพานและหน่วยเคลื่อนที่ข้ามสะพานในที่สุดจะครอบครองเซลล์เดียวกันบนแผนที่ วิธีการจัดลำดับพวกเขาจากการชน?

มีวิธีการทั่วไปในการแก้ปัญหาดังกล่าวหรือไม่? หรือฉันต้องใช้โลก 3 มิติเพื่อทำสิ่งนี้?


ดีถ้าคุณกำลังทำระบบแบบเรียงต่อกันคุณสามารถเพิ่มวิธี "isOccupied" ในแต่ละครั้ง เพียงแค่มีการตรวจสอบสะพานด้านล่างตัวเองและด้านบน
Benjamin Danger Johnson

2
หากหน่วยภาคพื้นดินไม่ตอบโต้กับหน่วยน้ำคุณอาจจัดการกับการชนกันของทั้งสองชุด และอาจพิจารณาว่าเรือที่ Harboor เป็นหน่วยภาคพื้นดินที่อนุญาตให้มีการโต้ตอบเช่นผู้เล่น / npc ที่เข้ามาในเรือ
GameAlchemist

คำตอบ:


7

โดยทั่วไปคุณจะต้องสร้างมิติที่สามแม้ว่าในกรณีที่ง่ายที่สุดมันอาจมีเพียงสองค่า: "บนพื้น / บนสะพาน" และ "บนน้ำ / ใต้สะพาน"

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

ในกรณีของ ASC ระดับคือ:

  • ช่องว่าง
  • ระดับความสูงสูง (ระเบิด)
  • ระดับความสูงปานกลาง (ดัก)
  • ระดับความสูงจากพื้นดิน
  • พื้นดิน (ส่วนใหญ่เป็นหน่วยพื้นดินและเรือที่แล่นได้อย่างรวดเร็วแม้เหนือน้ำ)
  • น้ำ
  • บางส่วนจมอยู่ใต้น้ำ (เรือดำน้ำ)
  • จมอยู่ใต้น้ำ ("ซ่อน" เรือดำน้ำ)

9

คุณสามารถเพิ่มคุณสมบัติง่าย ๆ ให้กับแต่ละไทล์ที่ระบุระดับของมัน

ตัวอย่างเช่น:

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

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

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


@aleguna ไม่ต้องกังวล! มันสนุกมากที่ได้ช่วยเหลือ :)
Zolomon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.