2011-04-27 59 views
2

嘿。 我打算写一个简单的船舶射击游戏作为CG家庭作业,所以我打算使用一些地图系统(虽然没有必要,它会是一个“额外”),我不知道如何来表示一张地图并且'分成部分',我的意思是,并不是所有的地图都可以在一个框架中看到。 人们通常如何工作?如何存储游戏地图并在屏幕上显示它的一部分?

回答

2

考虑使用QuadTree。它将地图按照区域分解成小部分。它可以让你定义你想看到多少空间,这使得它适合放大或缩小,或平移。

有一个C# implementation你可能很容易适应C++。

0

您还可以使用瓷砖和指向瓷砖的固定大小的二维指向阵列。这些指针让您可以在多个地方重复使用切片。

0

您可能希望像早期的视频游戏硬件那样做:存储二维字节数组,其中每个字节是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]); 
    } 
} 

此代码是不是最优速度,并且缺少一些逻辑,例如如何处理部分从屏幕滚动出来的地图。但这是一个开始。