C++;根据速度绘制地图 我试图用SDL库在C++中创建我自己的版本的River Road(2D游戏)。在游戏中,玩家驾驶一架位于屏幕底部的飞机,目标是通过关卡而不会受到敌人的伤害或撞击地球。我现在拥有的是两张代表土地和水的位图。我从记事本上画地图,在记事本上我存储了1和0,它们相应地代表了净陆地和水

C++;根据速度绘制地图 我试图用SDL库在C++中创建我自己的版本的River Road(2D游戏)。在游戏中,玩家驾驶一架位于屏幕底部的飞机,目标是通过关卡而不会受到敌人的伤害或撞击地球。我现在拥有的是两张代表土地和水的位图。我从记事本上画地图,在记事本上我存储了1和0,它们相应地代表了净陆地和水,c++,sdl,C++,Sdl,所以我有一个记事本,上面写着关卡的布局。我把所有这些值都放到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)

所以我有一个记事本,上面写着关卡的布局。我把所有这些值都放到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++
    }
}
你可以使用

int SDL_BlitSurface(SDL_Surface*    src,
                    const SDL_Rect* srcrect,
                    SDL_Surface*    dst,
                    SDL_Rect*       dstrect)
我建议您在循环之前创建三个
SDL_曲面*
,一个用于水,一个用于陆地,一个用于整个地图

您已经在为循环中的各个分幅创建
SDL\u Rect
,因此您缺少的只是整个地图的
SDL\u Rect
w=8*60,h=200*60

然后将相应的平铺blit到地图,类似于下面的
SDL_BlitSurface(平铺、块数组[i]、mapSurface、mapRect)

现在,
mapSurface
是您的整个地图。如果不再使用瓷砖表面,应使用
SDL_FreeSurface(srf)释放它们

int SDL_BlitSurface(SDL_Surface*    src,
                    const SDL_Rect* srcrect,
                    SDL_Surface*    dst,
                    SDL_Rect*       dstrect)