嘿。 我要写一个简单的船射击游戏作为CG家庭作业,所以我打算使用一些地图系统(虽然没有必要,它将是一个“额外的”),我不知道如何代表一张地图并将其显示为“部分”,我的意思是,并非所有地图都会在一个框架中显示。 人们通常如何使用它?
答案 0 :(得分:2)
考虑使用QuadTree。它会将您的地图分解为基于区域的小组件。它可以让您定义要查看的空间大小,这使其成为放大和缩小或平移的理想选择。
有一个C# implementation你很可能很容易适应C ++。
答案 1 :(得分:0)
您还可以使用图块和固定大小的2D图块指针。指针是如此,你可以在多个地方重复使用瓷砖。
答案 2 :(得分:0)
你可能想要像早期的视频游戏硬件那样做:存储一个2D字节数组,其中每个字节是一个8x8像素“tile”的索引。在其他地方存储一个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] );
}
}
此代码速度不是最快,并且缺少某些逻辑,例如如何处理部分滚动屏幕的地图。但这是一个开始。