Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3更新变量报告为空。。有条不紊_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 AS3更新变量报告为空。。有条不紊

Actionscript 3 AS3更新变量报告为空。。有条不紊,actionscript-3,flash,Actionscript 3,Flash,我正在做一个AS3的太空游戏-我有一个敌人的职业叫做EnemyShip 我已经注册了Event.ENTER_FRAME,它工作正常-问题是我的变量Array类型的rowXY同时报告null和非null值。。以某种模式 我怎样才能避免这种情况发生(或者有没有一种更简单的方法可以让飞船在Flash Professional中移动?) 模式如下: 敌对: C.as(常数): 如果你想用flashprofessional制作动画,我会利用它们的内置功能。您还可以利用该类在代码中为飞船设置动画。我复制了

我正在做一个AS3的太空游戏-我有一个敌人的职业叫做EnemyShip

我已经注册了Event.ENTER_FRAME,它工作正常-问题是我的变量Array类型的rowXY同时报告null和非null值。。以某种模式


我怎样才能避免这种情况发生(或者有没有一种更简单的方法可以让飞船在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;