SDL che unisce più superfici contemporaneamente


10

Sto cercando di scrivere un gioco platform in cui gli sprite per gli sfondi di livello sono suddivisi in blocchi di 512x512. Tengo 3 blocchi in memoria alla volta e sto provando a scrivere codice per blitare tutti e tre sullo schermo. Ecco il codice attuale che ho:

SDL_Rect where;
where.y = -game->camera->y;

where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);

where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);

where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);

Il problema in cui mi imbatto è che qualsiasi pezzo venga benedetto per primo è l'unico che si presenta. Il resto non appare sullo schermo. Penso che il problema potrebbe avere qualcosa a che fare con la trasparenza alfa, ma anche se i pezzi non si sovrappongono affatto non riescono ancora a blit. In altre parti del codice inserisco contemporaneamente più elementi sullo schermo, come personaggi e sfondi, e tutti vengono visualizzati correttamente. Questo particolare segmento di codice è l'unica area in cui sto riscontrando questo problema.

Immagine dello schermo

Se commento la riga che unisce left_chunk, cambia in questo:

Screenshot dopo


Sei sicuro che i tuoi valori X calcolati posizionino l'immagine nell'area visibile dello schermo?
Zack The Human,

@ZackTheHuman Sono parzialmente fuori schermo, poiché lo schermo è solo 300x175 e i blocchi della mappa sono 512x512. All'inizio ho pensato che potesse essere stato il problema, ma se sono sullo schermo o no sembra irrilevante per il rendering corretto o meno. Posso caricare uno screenshot per aiutare a illustrare il problema.
motore extropico il

1
La documentazione SDL afferma che SDL_BlitSurface salva il rettangolo finale in dstrect dopo il blitting. Hai provato a resettare la variabile where dopo ogni blit?
Asakeron,

@Asakeron Quello è stato! Non mi aspettavo dove essere modificato. Dovresti rendere il tuo commento una risposta!
motore extropic

Risposte:


8

La documentazione SDL afferma che SDL_BlitSurface salva il rettangolo finale in dstrect dopo il blitting. La reimpostazione della variabile where risolve il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.