В то время как вы должны использовать внешние AS файлы (его хорошая практика), вот причина, почему у вас возникли проблемы, и я собираюсь объяснить линию за линией
var car:Object = {carcolor:String,carscale:Number,carpower:Number};
//This creates an object called car. Suppose it saves it in memory at "location" 0x12345
var test:Array = new Array();
//This creates an empty array
for (var i:Number=0; i<10; i++) {
test.push(car);
//This adds the object "car" to the array
//Since Object is a reference type, its memory location is actually added to the array
//This means you added 0x12345 to the array (10 times over the loop)
}
//The array now contains
[0x12345, 0x12345, 0x12345, .......];
//So now
test[1]; //returns the object at 0x12345
test[1].carscale=5; //sets the carscale property of the object at 0x12345
Поскольку все объекты в массиве указывают на одно и то же место, получение любого из них фактически возвращает один и тот же объект.Это означает, что все они будут показывать carscale
в 5
Решение этой проблемы было бы:
var test:Array = new Array();
for (var i:Number=0; i<10; i++) {
var car:Object = {carcolor:String,carscale:Number,carpower:Number};
test.push(car);
}
Лучше, РЕАЛ объектно-ориентированное решение было бы создать класс под названием Car, а затем вместо делает
var car:Object = {carcolor:String,carscale:Number,carpower:Number};
использовать
var car:Car = new Car();
Car.as
класс будет выглядеть так:
public class Car {
public function Car() {
//this is the constructor, initialize the object here
//Suppose the default values of the car are as follows:
carcolor="red";
carscale=5;
carpower=1000;
}
public var carcolor:String;
public var carscale:Number, carpower:Number;
}
На самом деле, вы можете даже использовать другой конструктор, который автоматически устанавливает свойства на основе аргументов:
public function Car(_color:String, _scale:Number, _power:Number) {
carcolor=_color;
carscale=_scale;
carpower=_power;
}
и называют его
var car:Car=new Car("red", 5, 1000);
Фактически, car
до carcolor
, carscale
и carpower
даже не требуется, потому что это очевидно, когда вы помещаете их в класс под названием Car
.
Я предлагаю вам использовать внешние файлы как файлы и особенно создавать класс Car.as для хранения информации. Таким образом, вы можете добавить гибкость в свое приложение и сделать его более легким для отладки/поддержки во времени. –