Лучший способ сохранить состояние местности? - PullRequest
2 голосов
/ 06 марта 2011

Я строю игру, используя canvas.

У меня есть местность, которая генерируется случайным образом при инициализации игры. Ландшафт можно уничтожить с помощью оружия в игре.

Вот пример местности, которую я хочу сгенерировать .

При создании этой 2D местности ...

  • Лучше ли просто хранить пики по x координате или хранить каждый пиксель, представляющий собой ландшафт?
  • Когда часть удаляется из-за повреждения оружия, должен ли я выключить этот пиксель и затем перерисовать местность или перерисовать местность, проверяя, является ли каждый из них на через сохраняемый урон от оружия? Или, при нанесении урона оружием, я должен скорректировать каждую вершину в состоянии местности, а затем перерисовать?

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Я думаю, вы можете безопасно хранить ландшафт в 2D массиве. Наличие массива bools размером 3000x1000 может показаться страшным, но будьте уверены, обход такого массива все еще очень быстр Вы можете пройти весь этот массив 10 раз и при этом поддерживать плавную скорость анимации.

1 голос
/ 06 марта 2011

Да, выжженная земля! Насколько я помню, вы могли бомбить круговые объемы ландшафта даже ниже первоначальной поверхности (чехарда!). Ландшафт будет разрушаться и заполнять пробелы. Следовательно, хранения только полигональных координат вершин поверхности будет недостаточно. Подход на основе массива на пиксель кажется лучшей идеей.

Проблема перерисовки остается сложной. Я думаю, что невозможно перерисовать весь холст со скоростью 30 кадров в секунду. Может быть, вы можете перерисовать только поврежденные / разрушенные оружием пиксели.

0 голосов
/ 07 марта 2011

Допустим, вы разбили свою местность на подквартиры.

До:

+---------------------------+
|           ______       /  |
|   ___    /      \     /   |
|  /   \__/        \___/    |
|-/                         |
|                           |
|                           |
|                           |
+---------------------------+

После:

+---------------------------+
|    |    | ___|__  |    |  |
|   _|_   |/   |  \ |   /|  |
|  / | \__/    |   \|__/ |  |
|-/--|----------------------|
|    |    |    |    |    |  |
|    |    |    |    |    |  |
|    |    |    |    |    |  |
+---------------------------+

Вы можете иметь три состояния для этих подразделов:

  1. Вся местность
  2. Все пусто
  3. Разделение вверх

Это должно дать вам достойную оптимизацию без серьезного ущерба для читаемости кода.

...