Как я могу сохранить игровую карту и отобразить ее часть на экране? - PullRequest
2 голосов
/ 27 апреля 2011

Эй.Я собираюсь написать простую игру по стрельбе на корабле в качестве домашнего задания для CG, поэтому я планирую использовать какую-то систему карт (хотя в этом нет необходимости, это будет «дополнительно»), и я понятия не имею, какпредставлять карту и показывать ее «по частям», я имею в виду, что не вся карта будет видна в одном кадре.Как люди обычно работают с этим?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Рассмотрите возможность использования QuadTree .Он разбивает вашу карту на маленькие компоненты в зависимости от области.Он позволяет вам определить, сколько места вы хотите видеть, что делает его идеальным для увеличения или уменьшения масштаба или панорамирования.

Существует реализация C # , которую вы, вероятно, вполне можете приспособить для C ++легко.

0 голосов
/ 28 апреля 2011

Возможно, вы захотите сделать это так, как это делали ранние устройства для видеоигр: хранить двумерный массив байтов, где каждый байт является индексом «плитки» размером 8x8 пикселей. В другом месте хранится массив плиток размером 8x8 пикселей. Также сохраняйте смещение в пикселях от левого верхнего угла карты до левого верхнего угла экрана.

Когда пришло время рисовать карту, визуализируйте только плитки, которые должны быть видны на экране, в соответствии со смещением в пикселях от угла карты к углу экрана:

 int tile_x = pixel_x / tile_width;
 int tile_y = pixel_y / tile_height;
 for( int y=tile_y; y<=tile_y+screen_height_in_tiles; ++y )
 {
   for( int x=tile_x; x<=tile_x+screen_width_in_tiles; ++x )
   {
     int screen_x = tile_x * tile_width - ( pixel_x % tile_width );
     int screen_y = tile_y * tile_height - ( pixel_y % tile_height );
     render_tile( screen_x, screen_y, map[y][x] );
   }
 }

Этот код не является оптимально быстрым, и отсутствует некоторая логика, например, как работать с картой, которая частично прокручивается за пределы экрана. Но это только начало.

0 голосов
/ 27 апреля 2011

Вы также можете использовать плитки и двумерный массив указателей на плитки. Указатели позволяют использовать плитки в нескольких местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...