C ++绘制地图相应的速度

时间:2014-01-08 20:05:04

标签: c++ sdl

我正在尝试使用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

1 个答案:

答案 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 );

将其释放