2013-08-08 9 views
0

Je sais que mon titre est un peu moche. Mon problème est ceci, j'essaye de coder un petit jeu en C++ avec des graphiques de Win32 et je veux que toutes mes pièces soient tirées du haut vers le bas de sorte qu'elles se passent l'une devant l'autre correctement. (Par exemple, si je suis devant un arbre, il dessine l'arbre d'abord, puis le joueur je suis devant)Amélioration de la performance graphique en 2D

Ma première idée était, en utilisant des vecteurs comme j'avais besoin d'une chose de type tableau dynamique, pour cycle dans une boucle for comme ceci

for(y = 0; y < playerYValue; y++){ 
    //Check every enemy/object to see if its yValue matches the looping y 
    object.drawImage(); 
} 

Et le même pour devant le joueur. Cependant, après avoir effectué quelques tests, cela est très inefficace car avec la boucle, cela prend 34 millisecondes, et sans cela il faut 2:/

Je cherche un moyen de dessiner tous mes objets dans l'ordre et apprécierais tout aider quoi que ce soit, tout vaut la peine d'essayer. C'est un domaine que je ne peux pas penser à une manière inventive de résoudre le problème.

S'il vous plaît demander si vous avez besoin de moi pour donner plus de détails :)

EDIT: Le commentaire dans le code est un espace réservé pour le vecteur itérations à chaque fois pour vérifier si yValue est égal à y :) Je pensais que je l'objet 'd effacer cela un peu :)

+0

Quels sont les contenus de "object.drawimage()"? – Kevin

+0

drawImage() dans ce cas est juste un espace réservé pour la fonction de dessin d'image. C'est juste un tirage basique de Win32, rien de spécial. –

Répondre

2

Peut-être que vous devriez trier les objets par valeur y et ensuite les rendre, cela devrait être plus rapide si vous faites actuellement une recherche sur chaque objet chaque fois que vous dessinez un objet.

Et essayez de ne pas rendre le joueur spécial. Le joueur devrait aussi être un "objet", alors vous devriez trier une fois de retour à l'avant, puis revenir en arrière.

+0

Ok, eh bien, tous mes "objets" sont membres de l'Entité pour de telles raisons, donc je pourrais faire un vecteur qui englobe tout. comment pourrais-je trier toutes mes entités par une variable? :) Je connais l'algorithme sort(), mais je pense que cela ne ferait que trier par nom? (Merci pour l'aide, c'est certainement matière à réflexion!) –

+0

Aussi, si le joueur est inclus dans ce vecteur variable, comment ferais-je toutes les choses spécifiques à lui? Ou devrais-je essayer de m'assurer que toutes les spécificités sont traitées dans la classe :) –

+0

@BradleyHodgkins Votre dernière suggestion est le cas idéal, si vous avez besoin de vous pouvez garder un Player myPlayer à l'objet joueur, avant de l'ajouter à la liste 'Entity'. Ensuite, utilisez ce pointeur pour opérer sur ses spécificités, telles que l'entrée du joueur, etc. Vous devriez essayer d'utiliser la surcharge/l'héritage pour minimiser le besoin de contrôle externe possible. Merci –

Questions connexes