Човен, що проходить під мостом, в 2D плитці на основі РТС


10

Я пишу 2D плитку на основі RTS. І я хочу додати до нього функцію "псевдо 3D" - мости через річки.

Я ще не почав кодування, просто намагаюся подумати, як це відповідає моделі виявлення зіткнень. Човен, що проходить під мостом, і підрозділ, що рухається через міст, врешті-решт займуть ту саму клітинку на карті. Як запобігти їх зіткненню?

Чи існує спільний підхід до вирішення такої проблеми? Або мені потрібно реалізувати 3D-світ для цього?


Добре, якщо ви робите систему на основі плитки, ви можете додати щось на зразок методу "зайнятий" щоразу. Просто встановіть перевірку мосту нижче себе і вище.
Бенджамін Дангер Джонсон

2
якщо наземні одиниці не взаємодіють з водяними установками, ви можете поводитись в окремі зіткнення для обох наборів одиниць. І, можливо, вважають, що човен у гавані є наземним підрозділом, що дозволяє взаємодіяти, як гравець / npc, що входять у човен.
ГраАльхімік

Відповіді:


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 lvl, а потім океанське дно на рівні lvl 0. Якщо текстура води дещо прозора, ви зможете побачити океанське дно зверху.


@aleguna Не хвилюйся! Це просто цікаво допомогти. :)
Золомон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.