2008-10-01 26 views
5

J'ai une question sur les boucles en flash ....flash: pour les boucles qui tournent lentement

Dans un jeu de tuiles, je fais une mini carte de tout le niveau. La façon dont il rend la carte est une fonction avec une boucle for dans une autre boucle. Il passe à travers chaque position de la tuile et attache une pièce de la carte (essentiellement un carré de 3x3 pixels) qui est colorée en fonction de ce que la tuile est. Quoi qu'il en soit, mon problème est que lorsque le niveau devient gros comme les tuiles 50x50, la redistribution de la carte prend une éternité (jusqu'à 3 secondes). Est-ce qu'il y a un moyen de réparer ceci? Ou y a-t-il une autre façon de faire une mini-carte? Si le niveau devient de plus en plus important, cela peut prendre jusqu'à 10 secondes!

Toute aide est appréciée!

Merci, Matt

+0

Pouvez-vous poster un exemple de code? Est-ce as2 ou as3? – defmeta

Répondre

0

Il ne faut pas longtemps pour que les boucles elles-mêmes pour courir, mais quoi, exactement, faites-vous à l'intérieur de chaque boucle? Quelles sont les opérations pour attacher et colorier une carte?

-Adam

+0

Je suis d'accord, il sera lent de dessiner que beaucoup d'objets mais 3 secondes est un peu exagéré. – grapefrukt

3

Flash ne rend pas les dalles très rapidement. C'est génial de stocker des graphiques qui ne changent pas dans un tampon et d'afficher rapidement ce tampon rapidement. Chaque objet graphique (ou image-objet) ajouté en tant qu'enfant à la scène doit être rendu indépendamment.

Votre problème est le flash doit dessiner 50x50 = 2500 carreaux chaque image! Même s'ils ont 3x3 pixels, flash les traite encore comme des objets séparés.

Ce serait bien si vous pouviez tout stocker dans un tampon ou dans un objet et l'afficher. Essayez donc de dessiner ces carreaux 3x3 dans le même objet au lieu de plusieurs objets. Cependant, cela pourrait nuire à votre fonctionnalité car l'objet entier devra être rendu à chaque image.

D'autres suggestions pourraient être de rendre les objets dans des cellules plus grandes sur une grille. Au lieu d'avoir 50x50, commencez par 10x10 puis dessinez 5x5 cellules dans chaque cellule. Cela accélérerait probablement les choses.

Espérons que cela aide. Si vous trouvez une bonne solution, veuillez poster!

1

Oui. La boucle elle-même ne prend pas longtemps du tout. Mais à chaque itération, je joins un MovieClip de la bibliothèque. En passant, il ne le fait pas sur enterFrame, juste quand l'utilisateur appuie sur Pause (espace).

1

Probablement c'est (comme mentionné ici) que votre boucle est lente. Compter de 0 à 2500 est vraiment rapide, mais si vous faites des calculs lourds à chaque itération, cela ajoutera. Bien sûr, sans voir le code, nous ne pouvons pas vous aider avec cela. Bien que vous puissiez faire des trucs pour que la boucle soit plus lisse (comme l'exécuter sur plusieurs images), mais si c'est une boucle de 3 secondes, il y a beaucoup de choses à faire pour l'optimiser. , pour que ça ne provoque pas un hickup trop long.