2009-12-14 2 views
2

Cela m'arrive souvent et je n'ai pas encore trouvé de solution satisfaisante. Dites que vous avez deux classes, Tree (com.company.Tree) et Fruit (com.company.Fruit). Sur la scène dans Flash, l'arbre a une instance de Fruit (class = fruit1, classe de base = com.company.Fruit), et son nom d'instance est fruit. Tout va bien, jusqu'à ce que vous dupliquiez les clips d'arbres et de fruits pour créer un deuxième arbre, qui a une instance différente de Fruit (class = fruit2, base class = com.company.Fruit), mais dont le nom d'instance dans le 2ème arbre est aussi des fruits. Ceci est nécessaire car le code de la classe Tree fait référence à "fruit" (fruit.x + = 20, par exemple).Flash AS3 - Objets de la même classe de base dans la bibliothèque - La coercition de type a échoué

Je reçois ceci:

Warning: All instances named 'fruit' will be automatically declared as fruit1 in symbols that use fruit as their base class. In symbols that are linked to user-defined base classes, instances with the same name must be of the same type. 

Et bien sûr ceci:

TypeError: Error #1034: Type Coercion failed: cannot convert [email protected] to fruit1. 
+0

Il y a quelque chose d'étrange dans votre installation ici: vous avez deux instances de com.company.Tree - sont-ils la même classe ou sont-ils class = tree1 et class = tree2? Vos instances de fruits sont-elles définies à l'intérieur des instances de l'arbre ou côte à côte sur la scène? Si vous pouviez expliquer plus clairement votre bibliothèque et votre mise en scène, je pourrais peut-être vous aider. – alecmce

+0

Les arbres ont la même classe de base (Tree). Les exemples de fruits sont à l'intérieur des arbres, un fruit par arbre. J'espère que cela pourra aider. C'est toujours un gros problème pour moi. – phil

Répondre

3

Utilisez-vous l'option de compilation de "déclarer automatiquement les instances de la scène"? Dans ce cas, vous devrez peut-être désactiver cela et ajouter:

public var fruit:Fruit; 

à votre classe Tree. Cela affectera "fruit" à votre MovieClip sur la scène avec un nom d'instance de "fruit" et évitera le conflit. Vérifiez this post pour en savoir plus.

1

La réponse de typeoneerror fonctionne. Flash définit le type de fruit2 sur fruit1, ce qui est essentiellement la même chose que la définition de base à Fruit.

Un avertissement assez ennuyeux, mais tout fonctionne bien

+0

Puisque le lien dans le message de typeoneerror est mort, je pense que je dirigerai aussi les curieux vers un post sur mon propre blog sur ce même sujet. http://www.scriptocalypse.com/?p=5 – scriptocalypse

Questions connexes