SDL — прокрутка (вне экрана) поверхности

Я с трудом зацикливаюсь на концепции создания прокручиваемой графической программы на SDL на c ++ … например, для игры с боковой прокруткой или для игры сверху вниз с картой, превышающей разрешение экрана.

По сути, у меня сложилось впечатление, что мне нужно скопировать все свои ресурсы на виртуальную поверхность, а затем скопировать только часть этого на экран, но это, похоже, не работает. Вот часть кода, который я использую:

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

Он сбрасывает источник в dest с заданным x, y с указанным отсечением. В этом примере у меня есть массив SDL_Rects, которые содержат расположение различных плиток. Этот код работает, если я блечу прямо к мастеру (фактическому экрану), но попытка блеить до «полного» и затем бить часть этого, чтобы освоить, только делает меня пустым экраном. Что мне здесь не хватает?

0

Решение

Хорошо, хорошо, я понял, что я делал неправильно.

Когда я создал «полную» поверхность, она осталась нулевой. Я только что обнаружил команду SDL_CreateRGBSurface ().

Вот так:

full = SDL_CreateRGBSurface(SDL_SWSURFACE,STEP*MAP_X,STEP*MAP_Y,S_BPP,0,0,0,0);

Не может соскользнуть на нулевую поверхность. Я не знал об этой функции. Чем больше вы знаете ~

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]