我正在尝试使用SDL库在C++中创建我自己的河马(2D游戏)版本。在游戏中,玩家驾驶屏幕底部的飞机,目标是在不受到敌人伤害或击中地面的情况下通过关卡。我现在拥有的是几个表示土地和水的位图。我从记事本上绘制地图,我在记事本上存储了1和0,它们相应地表示陆地和水域。
所以我有一个记事本,上面写着关卡的布局。我将所有这些值放入map数组中。我在网上发现我可以通过飞机的速度来移动地图。不幸的是,我不知道如何达到这样的效果。
SDL_Rect blockarray[200];
for(int y=0;y<16;y++){
for(int x=0;x<8;x++){
int surfacetype = getsurface(x,y);
int color=0;
switch (surfacetype)
{
case 0:
color=blue;
break;
case 1:
color=green;
break;
default:
color=blue;
break;
}
blockarray[i].x=80+60*x;
blockarray[i].y=60*y;
blockarray[i].h=60;
blockarray[i].w=60;
i++
}
}我想知道的是:我如何将这些小块组装成一个曲面,或者当我试图在飞机上升时将地图向下移动时,我如何将它们视为一个曲面。
记事本:
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0发布于 2014-01-09 04:43:52
您可以使用以下命令完成此操作
int SDL_BlitSurface(SDL_Surface* src,
const SDL_Rect* srcrect,
SDL_Surface* dst,
SDL_Rect* dstrect)我建议您在循环之前创建三个SDL_Surface*,一个用于水,一个用于陆地,一个用于整个地图。
您已经为循环中的行业瓦片创建了SDL_Rect,因此缺少的就是整个地图的SDL_Rect ( w = 8 * 60, h = 200 * 60。)
然后,将相应的切片绘制到地图中,如下所示的SDL_BlitSurface( tileLand, blockarray[i], mapSurface, mapRect);
现在mapSurface就是你的整个地图。如果不再使用切片表面,则应使用SDL_FreeSurface( srf );释放切片表面
https://stackoverflow.com/questions/21005431
复制相似问题