我正在尝试使用SDL库在C ++中创建我自己的River ride(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
答案 0 :(得分:0)
您可以使用
执行此操作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
。)
然后将相应的图块blit到地图上,如SDL_BlitSurface( tileLand, blockarray[i], mapSurface, mapRect);
现在mapSurface
是您的整个地图。如果您不再使用瓷砖表面,则应使用SDL_FreeSurface( srf );