Bonjour,
j'ai une question d'optimisation a vous poser,
voilà j'ai une classe ItemBonus et de temps en temps je teste une collision et si c'est ok, je fais une action.
exemple :
1 2 3 4 5 6 7 8 9 10
| void ItemBonus::collide(Uint16 cx, Uint16 cy)
{
// les tests
if(status!=actif) return;
if(/*pas collision ?*/) return;
// les actions
status=pris;
// je fais d'autre trucs ici...
} |
voilà, je précise que status est une donnée membre de ItemBonus (et est un enum).
actuellement j'utilise le systeme ainsi :
for(...) vBonus[i]->collide(x,y);
vBonus est un vecteur.
Jusque là ca me va pas mal, mais je me dis qu'il faudrait peu être separer la partie test de la partie action.
Pas pour que ca soit plus propre, mais simplement pour avoir un code plus optimisé : faire une fonction plus petite qui ne fais que tester, cette fonction sera appelé souvent, et une autre : action() qui ne sera appelé que si la première retourne vrai.
dans collide() je ne laisse que les test, ca me permet d'ajouter un const, c'est bon ca, c'est senser rendre le code plus optimisé non ?
et creation d'une nouvelle fonction action...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| bool ItemBonus::collide(Uint16 cx, Uint16 cy) const
{
// les tests
if(status!=actif) return false;
if(/*pas collision ?*/) return false;
return true;
}
void ItemBonus::action()
{
// les actions
status=pris;
// je fais d'autre trucs ici...
}
// utilisation :
for(...) if(vBonus[i]->collide(x,y)) vBonus[i]->action(); |
voilà, d'un coté je rajoute un const, mais je rajoute une valeur de retour...
En fait, je ne sais pas si c'est plus efficasse ?
pouvez-vous me dire ce que vous en pensez ? si c'est une optimisation possible ? (je ne parle pas de beauté du code hein, bien de performance)
Merci.
Partager