Citation:
Envoyé par FabaCoeur
Je ne voie pas comment réaliser cette solution, peut-être faire une copie de surface ?
Il faut créer une surface avec SDL_CreateRGBSurfaceFrom de même taille et copier les pixels... Par contre, pour vraiment faire une copie, il faudrait utiliser la couleur pour la transparence.
Citation:
Pour ce qui est de la couleur transparente, en réalité je réalise que c'est un mauvais choix de la conserver. A la base je l'ai ajouté dans la class pour que l'on puisse, à tout moment, connaitre la couleur de la feuille ce qui n'est en réalité pas nécessaire. J'avais aussi penser pouvoir changer de couleur et de feuille, mais à ce compte là autant créer un nouvel objet... il n'est pas pas du tout nécessaire de la stocker en réalité.
Donc en effet, si on veut faire une copie, faudrait garder la couleur de la transparence.
Citation:
En revanche, comment supprimer la couleur transparente d'une surface ?
Il y a-t-il une fonction inverse à SDL_SetColorKey() ?
Il suffit de passer 0 au deuxième paramètre.
Citation:
Je pense aussi que la liste chainée d'erreur est un bon modèle, puisque ca permet de garder les erreurs dans l'ordre sur lequelle elles sont arrivées et d'en avoir plusieur.
Comme tu l'as dit c'est une question de gout après, mais si une erreur arrive puisqu'il est impossible de définir la couleur transparente (ce qui n'altère en rien le déroulement du programme) je préfère continuer. Et puis, l'utilisateur verra bien qu'il y a un problème !
Le gros problème c'est que le traitement derrière est assez lourd... utiliser un itérateur déjà, puis ajouter deux accèsseurs c'est pas top.
Suffit de tout internaliser pour ne pas laisser l'utilisateur s'en servir et laisser juste une fonction pour afficher les erreurs.
Citation:
A la base j'ai créer cette classe pour simplifier un peu ma class de type Personnage justement. Je préférais manier des noms d'animations en string, plutot que de constantes provenant de listes enum{} ou autres.
Lors d'une animation (plusieurs images) l'utilisation ressemble à:
Code:
1 2 3 4 5 6 7 8
| switch( /* vecteur vitesse */ ) {
case ...: anim = "haut"
case ...: anim = "bas"
}
if( /* gestion des animations par exemple */ ) {
anim += framecounter;
} |
Ainsi je retombe sur le nom de l'animation haut0, haut1,... je trouve cela assez parlant à la relecture du code. Mais l'utilisation de string est parfois un peu plus lourde à gérer.
Oui ce sera largement plus long qu'utiliser directement des entiers. Si tu veux garder cette solution, utilise au moins un tableau directement qui donnera le string correspondant.
Citation:
Je n'ai pas bien compris sur ce point.
Puis la fonction existe n'apparait que très peu non ?
Apparaît très peu mais dans des fonctions qui seront appelées souvent.
Citation:
Mais si un developpeur veut utiliser ma class et créer une fonction qui la prends en paramètre, il y aura forcement une copie non? Du coup si je ne l'autorise pas, il sera impossible de passer un Sprite en argument (à moins de le passer par référence avec &), je me trompe ?
Justement, il ne faut jamais passer directement la classe mais passer une référence ou le pointeur.
Jc