Actionscript 3 AS3更新变量报告为空。。有条不紊
我正在做一个AS3的太空游戏-我有一个敌人的职业叫做EnemyShip 我已经注册了Event.ENTER_FRAME,它工作正常-问题是我的变量Array类型的rowXY同时报告null和非null值。。以某种模式Actionscript 3 AS3更新变量报告为空。。有条不紊,actionscript-3,flash,Actionscript 3,Flash,我正在做一个AS3的太空游戏-我有一个敌人的职业叫做EnemyShip 我已经注册了Event.ENTER_FRAME,它工作正常-问题是我的变量Array类型的rowXY同时报告null和非null值。。以某种模式 我怎样才能避免这种情况发生(或者有没有一种更简单的方法可以让飞船在Flash Professional中移动?) 模式如下: 敌对: C.as(常数): 如果你想用flashprofessional制作动画,我会利用它们的内置功能。您还可以利用该类在代码中为飞船设置动画。我复制了
我怎样才能避免这种情况发生(或者有没有一种更简单的方法可以让飞船在Flash Professional中移动?) 模式如下: 敌对: C.as(常数):
如果你想用flashprofessional制作动画,我会利用它们的内置功能。您还可以利用该类在代码中为飞船设置动画。我复制了您使用此
for
循环获得的行为(您可以通过实例化3个对象并将其他3个对象直接插入舞台来获得相同的结果):
因此,为了避免这种情况,您可以将rowOrder
的值限制在1和3之间,例如:
enemy.rowOrder = 1 + int(Math.random()*3);
您还可以在EnemyShip
类本身中设置该值
希望能有所帮助。解决方案
据我所知,event.ENTER_框架仅传递给舞台上的对象,但事实并非如此
问题出在我的Eneyship类的构造函数方法中-舞台上和舞台下的实例都在监听ENTER_FRAME事件-舞台下的实例没有被分配rowXY(这种情况发生在添加到舞台上的事件中)
旧代码:
新代码:
那么,在这里我们可以学到什么教训呢?
无论对象是否显示,都会发生Event.ENTER\u帧。在您发布的屏幕截图中,您有以下代码:
if(rowOrder > 3)
rowOrder = 0;
但是,当您在OnAddedStatage()
中选中rowOrder
时,您没有0的案例——只有1、2或3。因此,当rowOrder
为0时,永远不会设置rowXY
将该代码更改为将
行顺序
设置为1而不是0,或者将其他代码更改为零索引。您在哪里设置行顺序
?我的猜测是,EnemyShip
的某些实例没有正确设置,导致rowXY
没有在OnAddedStatage()
@Cadin My bad中设置-下面是代码的图片:虽然for循环支持您的答案,但它在代码块中包含的代码并不精确。这里是代码的图片(编辑了一点)。谢谢你的帮助,不过-我很感激:)谢谢你的链接!我觉得有一天这些可能会派上用场;)“或者有没有一种更简单的方法可以让飞船在Flash Professional中移动?”为什么今天不行?:)你说得对-我将在我的下一个项目中开始使用Motion Tween(从Adobe Docs中阅读Motion Tween,它是一个非常出色的功能)。这对你很好,你学到了一些东西,但你应该学到的不仅仅是:没有任何事件侦听器会在AS3中停止神奇的工作。我的意思是永远,永远,永远。永远不会有事件因为不再使用对象而停止工作的情况,如果您自己不删除侦听器,它仍然会在那里,并且在您采取措施之前仍会激发。哈哈,我当然知道这一点-因此我使用destroy()方法。;)
for(var i:int = 1; i < 7; i++){
var enemy:EnemyShip = new EnemyShip();
enemy.rowOrder = i;
addChild(enemy);
}
x = rowXY[0];
enemy.rowOrder = 1 + int(Math.random()*3);
if(rowOrder > 3)
rowOrder = 0;