Domanda

Questo è un problema di SDL, ma ho la forte sensazione che il problema mi sono imbattuto non è correlato alla SDL, ma più per C ++ / puntatori in generale.

Per fare una lunga storia breve, questo codice non funziona (a cura di mostrare quello che davvero ha fatto):

player->picture = IMG_Load("player");
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

vedo nulla sullo schermo. Tuttavia, quando lo faccio in questo modo, funziona:

SDL_Surface* picture = IMG_Load("player.png");
player->picture = picture;
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

posso vedere il piccolo ragazzo che bene.

Il vero problema è che non riesco a istanziare Player :: immagine direttamente. Anche quando provo

picture = IMG_Load("player.png")

in player.cpp, io alla fine con un nullpointer.

È stato utile?

Soluzione

Io sono così stupido. Si scopre che, come ho dimenticato l'estensione ".png" ogni volta che cercavo di memorizzare la superficie Player :: immagine, e convenientemente ricordato di aggiungere ogni volta che mi stired in uno SDL_Surface dichiarate in main.cpp.

Ho avuto la sensazione che stavo trascurando qualcosa di davvero semplice qui, ma questo è solo imbarazzante. Cosa c'è una punizione raccordo per questo?

Altri suggerimenti

Che tipo di dati è player-> foto? Che tipo fa ritorno IMG_Load? E 'davvero difficile a venire con uno scenario in cui il risparmio un'espressione in una variabile temporanea cambia il risultato, a meno che non sia coinvolto una conversione di tipo.

E non vorrei chiamare questo puntatore esemplificazione. Stai istanziare un'istanza di un certo tipo di immagine e memorizzare un puntatore ad esso.

Questo è il motivo per cui si dovrebbe sempre controllare per vedere che IMG_Load) restituisce (...

SDL_Surface* picture = IMG_Load("player.png");
if (picture == NULL) {
  // there was obviously some sort of error.
  // what does SDL_GetError() say?
}

Alcune funzioni SDL restituiscono -1 se si verifica un errore. Basta controllare la documentazione e assicurarsi che si sta verifica la funzione ritorna. Questi passaggi rendono il debug di un molto più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top