2014-01-08 35 views
0

我想在C++中使用SDL库创建我自己的River ride(2D游戏)版本。玩家在屏幕底部飞行一架飞机,目标是在不受敌人伤害或击中地球的情况下通过关卡。我现在拥有的是代表土地和水的位图。我从记事本中绘制地图,我在那里存储1s和0s,这些地图和水分相应地分配了土地和水。C++绘制地图相应的速度

所以我有一个记事本说明关卡的布局。我将所有这些值放入地图数组中。我在互联网上发现我可以通过飞机的速度移动地图。不幸的是我不知道如何达到这样的效果。

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++ 
    } 
} 

什么,我想了解的是:我该如何组装这些小块我到一个表面或我怎么把他们当作一个当我尝试为飞机要上移动地图downards。

记事本:

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

可以使用

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

做到这一点,我建议你创建三个SDL_Surface*您的循环之前,一个水,一个是土地,一个用于整个地图。

您已经创建SDL_Rect在你的循环中induvidual瓷砖因此,所有你缺少的是整个地图的SDL_Rectw = 8 * 60, h = 200 * 60。)

然后你的blit相应平铺到地图像这样SDL_BlitSurface(tileLand, blockarray[i], mapSurface, mapRect);

而现在mapSurface是你的整个地图。如果你不打算再使用瓷砖表面,你应该免费使用SDL_FreeSurface(srf);