我很难理解用c ++在SDL中制作滚动图形程序的概念...例如,对于一个侧面滚动游戏,或者一个自上而下的游戏,其地图大于分辨率屏幕。
基本上,我的印象是我需要将所有资源blit到虚拟表面,然后只将其中一部分blit到屏幕上,但这似乎不起作用。以下是我正在使用的代码的一部分:
void showMap(){
for(int y=0;y<MAP_Y;y++){
for(int x=0;x<MAP_X;x++){
switch(map[x][y]){
case 0:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[0][0]);
break;
case 1:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[1][0]);
break;
case 2:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[2][0]);
break;
case 3:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[3][0]);
break;
default:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[4][4]);
break;
}
}
}
apply_surface(0,0,full,master,&vp_xy);
}
apply_surface的原型如下:
void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *dest, SDL_Rect* clip);
它使用指定的剪辑在给定的x,y处将目标bl压缩到dest。在这个例子中,我有一个SDL_Rects数组,用于保存各种tile的位置。如果我直接对主人(实际屏幕)进行blit,但是尝试将blit设置为'full',然后将其中的一部分blit to master,则只有空屏幕才能使用此代码。我在这里缺少什么?
答案 0 :(得分:1)
好的我知道我做错了什么。
当我创建“完整”曲面时,它仍为空。我刚刚发现了命令SDL_CreateRGBSurface()。
像这样:
full = SDL_CreateRGBSurface(SDL_SWSURFACE,STEP*MAP_X,STEP*MAP_Y,S_BPP,0,0,0,0);
不能blit到null表面。我不知道这个功能。你知道的越多〜