2010-02-28 5 views
1

Est-il possible de passer des arguments constructeurs à des objets instances que je place sur la scène? Les instanciations des objets d'instance sont-elles centralisées quelque part comme avec .NET WinForms, donc je peux simplement éditer le constructeur xxx = new CustomRecangle()?Flash: passer les arguments constructeur aux objets placés sur scène?

public class CustomRectangle extends MovieClip {   
    public function CustomRectangle(width:int, height:int) { 
     this.width = width; 
     this.height = height; 
    } 
} 

Répondre

4

Je ne crois pas que vous pouvez le faire, mais vous avez deux options:

1) Vous pouvez rouler dans un composant Flash. Faites en sorte que les différentes propriétés que vous souhaitez définir soient inspectables dans votre fichier AS, compilez-les dans un composant et déposez-les sur scène. Ensuite, vous pouvez supprimer plusieurs instances et définir les paramètres de ces instances pour être uniques dans chaque instance.

2) Vous pouvez simplement ajouter une fonction "init()" qui est appelée sur votre objet, et le configurer pour passer vos différentes propriétés dans l'init() au lieu du constructeur.

Enfin, et cela, je crois constitue légalement BLACK MAGIC alors ne le faites pas à moins que vous avez ABSOLUMENT:

je devais faire cette fois parce qu'il n'y avait littéralement pas d'autre moyen. Fondamentalement, disons que vous avez 200 objets sur scène, chacun avec un nom d'instance unique. Il serait trop difficile de revenir en arrière et de refaire manuellement chacun d'entre eux pour accepter les valeurs personnalisées, et en raison de la façon dont le programme est architecturé, il sera vraiment difficile d'écrire des appels init sur tout. Donc, à la place, vous pouvez utiliser this.name sur chaque objet. Ecrivez une classe statique MyObjectManager qui contient un dictionnaire contenant les objets mappés aux noms d'instance. Ensuite, dans votre constructeur de vos objets, vous pouvez écrire quelque chose comme "init (MyObjectManager.dict [this.name])" et bob est votre oncle. Faites-moi savoir si cela a du sens. Maintenant, comprenez qu'il y a d'énormes problèmes à le faire de cette façon - il rend votre code difficile à mettre à jour, et il associe étroitement toute votre logique à votre convention de nommage sur état, donc si l'un de vos noms d'instance est éteint re vissé.

Mais, c'est une option. Entre les trois voies décrites ici, vous devriez être capable de réaliser tout ce dont vous avez besoin!

1

Oui vous pouvez, mais dans le constructeur de la classe étendue ne pas oublier d'appeler la sorcière fonction super() appellera le constructeur de la classe de base.

+0

Merci de nous le signaler. Pouvez-vous dire «comment» ou «où» je peux spécifier les valeurs à transmettre? 1.) Je place l'objet sur scène. 2.) ...? – Ropstah

0

Voir this pour savoir si c'est un symbole que vous attachez via l'IDE Flash.

+0

Il n'y a donc aucun moyen de fournir les valeurs pour les objets d'instance (pas les valeurs d'argument par défaut) qui sont placés sur la scène dans l'EDI Flash? – Ropstah

+0

Non, comment deviner la largeur et la hauteur lorsque vous placez l'objet sur la scène!? Vous pouvez initialiser votre objet après qu'il sera ajouté à la scène. – Patrick

+0

Je comprends que l'IDE n'a aucun moyen de le savoir. Mais il doit y avoir un endroit où l'EDI place le code pour instancier l'objet? – Ropstah

0

Je pense que votre meilleur pari est de retirer l'objet de la scène Flash. Faites-en un cours de bibliothèque. et faire quelque chose comme

var myRectangle = new CustomRectangle(100, 100); 
myRectangle.x = 200; // These should be whatever its location needs to be 
myRectangle.y = 200; 
addChild(myRectangle); 
Questions connexes