Arrays 未定义属性的闪存访问

Arrays 未定义属性的闪存访问,arrays,actionscript-3,flash,Arrays,Actionscript 3,Flash,所以我用flash制作了我的第一个游戏(更像是转换成flash,已经在JS中有了)。我得到这个错误: "access of undefined property item" 我不知道为什么 addEventListener(Event.ENTER_FRAME, onEnterFrame); var Entities:Array = new Array(); //Create player var Player = new Character(); Player.x = stage.stag

所以我用flash制作了我的第一个游戏(更像是转换成flash,已经在JS中有了)。我得到这个错误:

"access of undefined property item"
我不知道为什么

addEventListener(Event.ENTER_FRAME, onEnterFrame);

var Entities:Array = new Array();

//Create player
var Player = new Character();
Player.x = stage.stageWidth / 2 - Player.radius;
Player.y = stage.stageHeight / 2 - Player.radius;

Entities.push(Player);
stage.addChild(Player);

function onEnterFrame(event:Event):void
{   
    for each (item in Entities)
    {
        item.update();
    }
}

我还将在实体中添加许多怪物,这就是为什么它是一个数组。

错误是因为您引用了一个名为
item
的变量,但尚未将其定义到编译器中

for each (item in Entities)
定义(var)
,您将不再收到错误:

for each (var item:Character in Entities)
我建议使用
向量
而不是
数组
(除了
向量
之外,它们基本上是相同的,每个对象都必须是定义的类型。这样,编译器就不必强制转换来知道数组中的对象是什么类型的

var Entities:Vector.<Character> = new Vector.<Character>();

因此,不可能像在js中那样将各种类型的对象放入一个数组中?并非所有的数组在AS3中都与js相同。我指的是AS3中
Vector
array
之间的区别。如果你想要数组中有多种类类型,那么你必须使用
array
而不是
Vector
(虽然如果它们都有一个共同的基类,你可以使用该基类的向量)。向量(在某些情况下)更快,并且在编码时更容易,因为你不必强制转换。非常感谢你的帮助,现在一切都如我所愿了:)另外,我的类名不是玩家,而是字符。可能会让人困惑,以备将来参考。啊,对了。对AS3有一点建议,建议的做法(虽然不是必需的,所以不要觉得有必要)是以小写字母开头所有实例名,以大写字母开头所有类名。这样更易于阅读。(您会注意到stackoverflow如何突出显示任何大写字母,就像它是一个类一样)
Character(item).update(); //since items in arrays are just stored as objects, you need to tell AS3 that this item is a Player class