2009-11-04 11 views
1

Est-ce que quelqu'un a des suggestions pour une bonne méthode de gestion de la liste d'affichage dans un projet actionscript 3? Je suis en train de construire une application pour le moment et garder une trace de tous les modules qui doivent être affichés et les réorganiser est devenu difficile. J'ai chargé des swfs et des classes instanciées qui se chargent également en swfs, images et vidéos. Dois-je tout référencer à la scène? Comment dois-je suivre l'arborescence d'affichage? Comment puis-je toujours forcer un module particulier au sommet de l'arbre?gestion des listes d'affichage dans les applications actionscript 3

Répondre

1

J'utilise conteneur DisplayObjects et laisse chaque DisplayObject gérer ses enfants directs (les parents disent aux enfants quoi faire). Habituellement, vous pouvez casser votre liste d'affichage en "couches" naturelles qui peuvent être dans leurs propres conteneurs. De cette façon, les conteneurs principaux ne doivent pas changer de profondeur, vous savez donc que le dernier conteneur ajouté à la scène sera sur le dessus.

Pour forcer un objet DisplayObject en haut de la liste d'affichage, utilisez simplement addChild (même s'il est déjà ajouté). Cela l'ajoutera au début de la liste.

+1

cela semble une bonne startegy, merci ;-) – martin

0

L'utilisation de conteneurs comme indiqué est la meilleure solution. Les conteneurs sont votre ami. L'utilisation de addChild() pour forcer quelque chose en haut de la liste fonctionne, mais peut être épuisante si vous devez le faire 50 000 fois dans votre code, et plus-quand vous avez plusieurs choses à garder en haut, peu importe quoi.

Donc ce que je fais est de créer un tableau "pile de profondeur prioritaire" dans ma classe de document, auquel j'ajoute tout ce que je veux "sur le dessus" tout le temps, et chaque fois que je fais un travail flagrant En changeant un objet d'affichage majeur, j'utilise simplement une méthode appelée "RunDepthStack" qui parcourt le tableau et rajoute tout dans le tableau.

Vous pouvez même obtenir extrêmement méta à ce sujet et ajouter des objets au tableau qui ne sont même pas nécessairement sur la scène en appelant

object.parent.addChild(object); 

qui vous permettra de gérer DisplayObjects priorisés quel que soit leur récipient avec un Une super méthode unique ...

Maintenant, si vous avez une interface utilisateur extrêmement complexe, vous allez devoir être plus précis, mais je ne pense pas que ce soit votre problème pour le moment.

+0

J'aime cette idée, avez-vous un exemple de la façon dont vous l'avez mis en œuvre? merci ;-) – martin

+0

apprendre en faisant! Personne ne m'a appris, gangsta. –

+0

Je n'aime vraiment pas l'idée que les enfants disent aux parents quoi faire! –

0

Si l'application est grande, j'ajouterai Child/removeChild lorsque l'utilisateur interagit avec l'application.

Si toutefois il est assez petit, simple visible vrai/faux le fait bien.

On dirait que vous êtes dans le premier cas. Mais oui, utilisez certainement une classe/un objet comme sitemap pour remplir votre navigation, garder une trace des références des modules, où se trouve l'utilisateur et qui peut être utilisé pour les liens profonds.

En ce qui concerne l'échange de profondeur, je suppose que vous parlez de la profondeur visuelle, mettre en œuvre ces :)

setChildIndex(example,0); // send to back 

setChildIndex(example,numChildren - 1); // bring to front 

Swap entre:

var otherindex = getChildIndex(theotherthing); 

Derrière cette chose:

setChildIndex(example, otherindex) //pushes the other thing forward 

En face:

setChildIndex(example, otherindex + 1); 

HTH.