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