Kapal melintas di bawah jembatan di RTS berbasis ubin 2D

10

Saya sedang menulis RTS berbasis ubin 2D. Dan saya ingin menambahkan fitur 'pseudo 3D' - jembatan di atas sungai.

Saya belum memulai pengkodean apa pun, hanya mencoba berpikir bagaimana ini cocok dengan model pendeteksian tabrakan. Sebuah kapal yang lewat di bawah jembatan dan sebuah unit yang bergerak di atas jembatan pada akhirnya akan menempati sel yang sama di peta. Bagaimana cara memperbaiki mereka dari tabrakan?

Apakah ada pendekatan umum untuk menyelesaikan masalah seperti itu? Atau saya perlu menerapkan dunia 3D untuk melakukan ini?

aleguna
sumber
baik jika Anda melakukan sistem berbasis ubin, Anda bisa menambahkan sesuatu seperti metode "isOccupied" untuk setiap waktu. Hanya periksa jembatan di bawah sendiri dan di atas.
Benjamin Danger Johnson
2
jika unit tanah tidak berinteraksi dengan unit air, Anda mungkin menangani tabrakan terpisah untuk kedua set unit. Dan mungkin menganggap kapal di harboor adalah unit darat untuk memungkinkan interaksi seperti pemain / NPC memasuki kapal.
GameAlchemist

Jawaban:

7

Anda pada dasarnya harus membuat dimensi ketiga, meskipun dalam kasus paling sederhana ini dapat terdiri dari hanya dua nilai: "di tanah / di jembatan" dan "di air / di bawah jembatan".

Sebuah inspirasi dapat ditemukan dalam cara Advanced Strategic Command melakukannya: Unit-unit menempati tingkat ketinggian tertentu, hanya dapat bergerak pada tingkat ketinggian yang sesuai dengan tipenya kecuali ada fitur spesifik yang memungkinkan mereka melakukan sebaliknya (misalnya landasan pacu untuk pesawat terbang) dan mengubahnya biasanya memerlukan poin pergerakan, dengan penalti pada beberapa level ketinggian atau lainnya. Ubin dapat ditempati oleh sejumlah unit selama masing-masing berada pada tingkat ketinggian yang berbeda.

Dalam kasus ASC, levelnya adalah:

  • ruang
  • ketinggian tinggi (pemboman)
  • ketinggian sedang (interceptor)
  • ketinggian serangan darat
  • tanah (sebagian besar unit tanah dan hovercraft, bahkan di atas air)
  • air
  • sebagian terendam (kapal selam)
  • kapal selam terendam ("tersembunyi")
Martin Sojka
sumber
9

Anda dapat menambahkan atribut sederhana ke setiap ubin yang menentukan levelnya.

Jadi misalnya:

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

Sekarang Anda dapat mengurutkan ubin Anda tergantung pada nilai layer mereka dan menggambarnya di bawah -> atas! Ini akan membuatnya terlihat seperti Anda memiliki kedalaman tertentu dalam gim Anda. Sebagian besar mesin ubin mendukung ini. Hal keren lainnya yang dapat Anda tambahkan adalah transparansi pada tekstur Anda sehingga Anda dapat melihat hingga ke lapisan bawah.

Ini dapat dilakukan dengan air misalnya - bayangkan air di lvl 1 dan kemudian dasar laut di lvl 0. Jika tekstur air agak transparan, Anda akan dapat melihat dasar laut dari atas.

Zolomon
sumber
@aleguna Jangan khawatir! Menyenangkan membantu. :)
Zolomon