AS3 - Cloner un objet
J'ai un jeu avec une variété de types de navires. Mon Ship
classe a un tableau statique en tenant une de chaque type. Chaque fois que je fais une nouvelle Ship
(autre que lors de l'initialisation de ce tableau), je veux en faire un clone de l'un de ces Ship
objets dans mon prototype de tableau.
1 - Comment puis-je courir à travers toutes les propriétés dans un Ship
objet et de les affecter à un deuxième Ship
objet?
2 - Comment puis-je voir si une propriété est un objet ou d'un type de base comme String
ou int
? Certains objets de mon Ship
classe doivent être cloné, et certains sont tout simplement des références qui ont besoin de rester le même.
OriginalL'auteur Martin Carney | 2011-12-11
Vous devez vous connecter pour publier un commentaire.
Une option, sans doute le plus agile, serait de définir clone méthodes pour chaque classe que vous avez besoin de cloner, tels que:
Une autre option est de cloner un objet à l'aide de la classe ByteArray comme cet exemple de la documentation Adobe:
J'ai vu des cas où cette approche ne fonctionne pas pour le clonage des instances de classes personnalisées, plus précisément les classes d'affichage comme des Sprites.
Une autre approche consiste à utiliser
describeType
de laflash.utils
paquet. AvecdescribeType
vous pouvez parcourir les propriétés d'un objet.Voici un exemple d'utilisation de
describeType
pour inspecter les propriétés d'un objet est une partie d'un utils lib j'ai écrit.Comme pour vérifier le type de la propriété, vous pouvez utiliser
describeType
ou vous pouvez également utiliser leis
opérateur comme ceci:Qui a des avantages aussi. Peut-être vous pouvez définir une valeur par défaut si aucune valeur n'est définie ou vous pouvez cloner des accessoires et d'autres pas. Une approche automatisée à l'aide de describeType ne devrait pas être trop souple.
OriginalL'auteur JeremyFromEarth
À courir à travers toutes les propriétés d'un navire de l'objet et de les affecter à une seconde:
De vérifier si la valeur d'une propriété est un objet que l'on pourrait utiliser typeof. La limitation de cela est qu'il y a seulement 6 types possibles de retour: valeur booléenne, la fonction, le nombre, l'objet, de la corde, et xml. Ainsi par exemple, si vous avez besoin de savoir si une propriété est un tableau on ne peut pas vraiment le faire avec typeof car ce serait en fait retour "objet" depuis le "tableau" n'est-ce pas l'une des 6 options, mais si vous êtes juste à l'identification de types simples comme les nombres et les chaînes de caractères par rapport à d'autres choses qu'il devrait faire l'affaire:
EDIT: Remplacé la variable "var" par "élément" depuis le var est un mot réservé.
Je reçois un certain nombre d'erreurs de syntaxe avec
for (var in shipobj2) var = shipobj1[var];
Ce pourrait être parce que "var" est un mot réservé, ou parce que vous l'appelez obj2 pour instruction et obj1 à l'intérieur de la boucle.
Mon mauvais à l'aide de la "var" dans l'exemple de code comme un nom de variable - remplacé par "élément".
OriginalL'auteur TheOx