2011-10-31 2 views
1

Chaque fois que je lance mon application, les couleurs changent, l'affichage est comme ci-dessouscouleur BPP change SDL

Display = SDL_SetVideoMode(WIDTH, HEIGHT, 16, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ASYNCBLIT) 

puis-je faire

SDL_FillRect(Display, &Woutput, colors[1]); 

couleurs info var:

Uint32 colors[3]; 
colors[1] = SDL_MapRGB(Surf_Display->format, 32, 32, 255); 

Si je change SDL_FillRect(Display, &Woutput, colors[1]); en SDL_FillRect(Display, &Woutput, SDL_MapRGB(Surf_Display->format, 32, 32, 255)); cela fonctionne correctement ce qui me fait croire qu'il a tellement rien à faire avec l'Uint32, mais je ne sais pas quoi changer.

+0

Si 'w' est tout sauf zéro, alors vous indexez au-delà des limites de votre tableau de couleurs de longueur un. Qu'est-ce que 'w' (ou capital' W'?) Supposé être? – HostileFork

+0

@HostileFork vous avez raison, je suis sorti des limites du tableau mais seulement pour l'exemple, j'aurais dû vérifier mon exemple voir les changements – Elgoog

+1

Selon la documentation, SDL_MapRGB renvoie un 'Uint32'. Cela ne devrait pas faire de différence si vous utilisez un élément de tableau comme intermédiaire ou si vous le transmettez directement. Donc, si c'est tout le code que vous avez - et que votre appel FillRect passe réellement 'colors [1]' * après * l'initialisation du tableau, il n'y aura pas de problème. Pouvez-vous fournir un peu plus de code dans la commande de ligne précise pour rechercher d'autres problèmes possibles? – HostileFork

Répondre

1

J'ajoute ce commentaire comme réponse comme suggéré.

Votre tableau de couleurs n'est probablement pas initialisé avec vos valeurs attendues lorsque vous appelez SDL_FillRect. Quand cela se produira, les couleurs auront ce qui est aléatoire et cela expliquerait la couleur changeant à chaque passage.

Pour voir si cela est vraiment le cas essayer zéro votre tableau droit de s'être initialisé-la chauve-souris comme ceci:

Uint32 colors[3] = {0}; 

Maintenant, si vous exécutez votre programme et de trouver les couleurs ne changent plus (il Je serai probablement tout simplement noir puisque les couleurs contiennent tous les zéros maintenant - et bien vous savez ce qui ne va pas en ce moment.