Thuyền đi qua một cây cầu trong RTS dựa trên gạch 2D


10

Tôi đang viết một RTS dựa trên gạch 2D. Và tôi muốn thêm một tính năng 'giả 3D' vào nó - những cây cầu bắc qua sông.

Tôi chưa bắt đầu bất kỳ mã hóa nào, chỉ cố gắng nghĩ làm thế nào nó phù hợp với mô hình phát hiện va chạm. Một chiếc thuyền đi qua cầu và một đơn vị di chuyển qua cầu cuối cùng sẽ chiếm cùng một ô trên bản đồ. Làm thế nào để prement chúng khỏi va chạm?

Có một cách tiếp cận chung để giải quyết vấn đề như vậy? Hoặc tôi cần thực hiện một thế giới 3D để làm điều này?


tốt nếu bạn đang làm một hệ thống dựa trên gạch, bạn có thể thêm một cái gì đó như phương thức "isOccupied" cho mỗi lần. Chỉ cần kiểm tra cầu bên dưới và bên trên.
Benjamin Danger Johnson

2
nếu các đơn vị mặt đất không tương tác với các đơn vị nước, bạn có thể xử lý các va chạm riêng biệt cho cả hai đơn vị. Và có thể coi một chiếc thuyền tại harboor là một đơn vị mặt đất để cho phép các tương tác như người chơi / một npc vào thuyền.
GameAlchemist

Câu trả lời:


7

Về cơ bản, bạn sẽ phải tạo ra một chiều thứ ba, mặc dù trong trường hợp đơn giản nhất, nó có thể chỉ bao gồm hai giá trị: "trên mặt đất / trên cầu" và "trên mặt nước / bên dưới cầu".

Một cảm hứng có thể được tìm thấy theo cách mà Bộ chỉ huy chiến lược nâng cao thực hiện: Các đơn vị chiếm một mức độ cao cụ thể, chỉ có thể di chuyển xung quanh các mức độ cao phù hợp với loại của chúng trừ khi có các tính năng cụ thể cho phép chúng làm khác (ví dụ đường băng cho máy bay) và thay đổi chúng thường chi phí điểm di chuyển, với hình phạt trên một số mức độ cao hoặc những người khác. Một ô có thể được chiếm bởi bất kỳ số lượng đơn vị nào miễn là mỗi đơn vị ở một độ cao khác nhau.

Trong trường hợp ASC, các cấp là:

  • không gian
  • độ cao (ném bom)
  • độ cao trung bình (đánh chặn)
  • độ cao tấn công mặt đất
  • mặt đất (hầu hết các đơn vị mặt đất và thủy phi cơ, thậm chí trên mặt nước)
  • Nước
  • ngập một phần (tàu ngầm)
  • tàu ngầm chìm ("ẩn")

9

Bạn có thể thêm một thuộc tính đơn giản cho mỗi ô xác định cấp độ của nó.

Ví dụ:

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();
        }
}

Bây giờ bạn có thể sắp xếp gạch của mình tùy thuộc vào giá trị lớp của chúng và vẽ chúng ở dưới cùng -> trên cùng! Điều này sẽ làm cho nó trông giống như bạn có một độ sâu nhất định trong trò chơi của bạn. Hầu hết các động cơ gạch hỗ trợ này. Một điều thú vị khác mà bạn có thể thêm là độ trong suốt cho kết cấu của bạn để bạn có thể nhìn xuyên qua lớp dưới cùng.

Điều này có thể được thực hiện với nước chẳng hạn - hãy tưởng tượng nước ở lv 1 và sau đó là đáy đại dương ở lv 0. Nếu kết cấu nước hơi trong suốt, bạn sẽ có thể nhìn thấy đáy đại dương từ trên cao.


@aleguna Đừng lo! Thật là vui khi được giúp đỡ. :)
Zolomon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.