AS3 Création d'un tableau d'objets
Je voudrais ajouter un tas de voitures sur la scène, et de les stocker dans un tableau comme des objets. Le problème est que je déteste l'aide externe, les fichiers et aimeraient le garder aussi simple que possible.
J'ai essayé de faire :
var car:Object = {carcolor:String,carscale:Number,carpower:Number};
var test:Array = new Array()
for (var i:Number=0; i<10; i++) {
test.push(car)
}
Le problème est que si j'essaie de définir une valeur d'un objet dans l'
test[1].carscale = 5
Chaque objet du tableau devient leur attribut carscale 5.
Est-il possible que je peux le faire sans l'aide de fichiers de classe externes?
Je vous suggère de commencer à l'aide extérieure sous forme de fichiers, et surtout de créer une Voiture.en tant que classe pour stocker vos informations. De cette façon, vous pouvez ajouter de la flexibilité à votre application et la rendre plus facile à déboguer/maintenir dans le temps.
OriginalL'auteur victorkhugo | 2012-04-07
Vous devez vous connecter pour publier un commentaire.
Alors que vous devriez utiliser externes COMME les fichiers (c'est une bonne pratique), voici la raison pour laquelle vous avez de la question, et je vais vous expliquer ligne par ligne
Depuis tous les objets dans le tableau pointer vers le même emplacement, d'avoir un quelconque d'entre eux seront effectivement en retour le même objet. Cela signifie que tous d'entre eux montrent
carscale
5Une solution à ce problème serait:
Mieux, RÉEL orienté-Objet, la solution serait de créer une classe appelée la Voiture et puis au lieu de faire
vous utilisez
La
Car.as
classe serait comme ceci:En fait, vous pourriez même utiliser un autre constructeur qui définit automatiquement les propriétés fondé sur des arguments:
et l'appeler comme
En fait, la
car
avantcarcolor
,carscale
etcarpower
n'est même pas nécessaire, car il est évident que lorsqu'on les met dans une classe appeléeCar
.OriginalL'auteur Pranav Hosangadi
Comme TheDarkIn1978 dit que vous êtes en poussant une référence de votre
car
exemple dans votre tableau. Lorsque vous modifiez la valeur d'une propriété de l'instance, le même phénomène se produit pour chaque référence.La réponse la plus simple est de créer un nouvel objet à chaque interaction de votre boucle comme suit:
[Mise à JOUR]
Je sais que vous avez dit que vous ne souhaitez pas utiliser "des classes externes", mais il y a des avantages à utiliser une classe personnalisée objet pour stocker des valeurs, par opposition à un
Object
objet. Voici un exemple:C'est un bon exemple de création d'un objet dans le seul but de stocker des valeurs qui ne changent jamais, en autorisant uniquement les propriétés de l'objet au moment de l'initiation et en utilisant des méthodes de lecture pour rendre les valeurs en lecture seule.
OriginalL'auteur Taurayi
Je me sens stupide, j'ai trouvé la réponse ici :
http://board.flashkit.com/board/showthread.php?t=792345
Vous êtes poussant la référence de l'Objet dans le tableau, pas un Objet unique à chaque fois. Que vous avez à faire quelque chose comme:
OriginalL'auteur victorkhugo
vous êtes en train d'ajouter de l'objet même de la matrice à plusieurs reprises. vous avez besoin de créer de nouvelles instances de votre voiture à l'objet.
EDIT:
bien que ce serait une des meilleures pratiques pour créer votre propre "Voiture" classe et de créer de nouvelles instances, même si c'est seulement un objet de petite taille avec 3 propriétés, voici un petit exemple qui devrait vous obtenir a commencé.
test.push({carcolor:String,carscale:Number,carpower:Number});
OriginalL'auteur TheDarkIn1978