Arrays 未定义属性的闪存访问
所以我用flash制作了我的第一个游戏(更像是转换成flash,已经在JS中有了)。我得到这个错误: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
"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