2012-06-07 6 views
1

J'écris un éditeur d'objet 2D afin de pouvoir créer plus rapidement l'interface utilisateur pour les programmes de base. Je n'utilise pas de bitmaps du tout. Au lieu de cela, je dessine simplement des primitives avec des appels de fonction dans la boucle du jeu. Tout s'est bien passé jusqu'ici, mais j'aimerais savoir comment modifier les couleurs des objets pendant l'exécution.Modification des couleurs des primitives pendant l'exécution dans Allegro 5

Le concept de base est que j'utilise une variable pour la couleur, et lorsque l'utilisateur appelle la fonction qui change la valeur de cette variable, cela change la couleur. Simple. Quelque chose comme:

void runColor(){ 
    ALLEGRO_COLOR color = NULL; 

    if(event.mouse.button&1) 
     color = al_map_rgb(255, 0, 0); 
    else 
     color = al_map_rgb(0, 255, 0); 

    al_draw_filled_rectangle(firstXval, firstYval, secondXval, secondYval, color); 
} 

Malheureusement, cela ne fonctionne pas. Lorsque j'utilise un code similaire, les objets ne sont simplement pas dessinés. Il n'y a pas d'erreurs de compilation, pas d'erreurs d'exécution, rien. Au lieu de cela, les objets n'ont pas de couleur et sont donc invisibles, bien que j'ai vérifié qu'ils sont effectivement créés. Sooo je suppose que cela signifie que la variable de couleur est en quelque sorte le bon type, mais ne conserve pas la valeur de al_map_rgb() quand il est égal à la valeur renvoyée par cette fonction. Je sais qu'il doit retourner quelque chose, car sinon il ne pourrait pas être un argument dans les fonctions al_draw. Alors que je pourrais juste écrire sinon si les instructions qui mènent à différentes fonctions de dessin, je préfère avoir un simple petit paquet de code comme ci-dessus qu'un tas de choses redondantes qui résout quelque chose qui devrait être simple. Je préférerais ne pas aller avec le code équivalent du ruban adhésif.

Donc, je suis sûr que le problème a probablement à faire avec mon hypothèse que al_map_rgb() renvoie une valeur de ALLEGRO_COLOR, mais je ne sais pas. Seriez-vous prêts à faire des suggestions?

Répondre

0

Tout d'abord, il n'y a pas besoin de faire des suppositions. Comme vous pouvez le voir dans the manual, al_map_rgb() renvoie en effet un objet ALLEGRO_COLOR.

Il n'y a rien de mal avec ce morceau de code. Soit les valeurs x,y sont incorrectes, le bitmap cible n'est pas ce que vous attendez, ou vous n'appelez pas al_flip_display(). Assurez-vous de redessiner toute la scène à chaque appel de trame (c'est-à-dire, chaque al_flip_display()).

De même, lorsque vous dessinez des primitives, assurez-vous de bien comprendre le fonctionnement des coordonnées. Lorsque vous dessinez un rectangle rempli, vous spécifiez les points externes (x1,y1)-(x1+w,y1+h).

Questions connexes