as3变量不可能变化

时间:2013-07-02 16:57:36

标签: actionscript-3

我遇到“Point”类型变量 velocity 更改的问题,没有任何调用来更改它。

private function framecode(e:Event) {
  trace(getVelocity().y);
  tracks.gotoAndStop(2);
  trace(getVelocity().y);
}

此代码是名为“tank”的类的一部分,该类扩展了 velocity 用于(我的移动对象类)的类。 velocity 是一个私有点类型变量, getVelocity()是一种公共访问方法。 曲目是一个名为movieClip,包含在与 tank 链接的一个内。事件侦听器是ENTER_FRAME。 曲目的帧没有编码。

不知何故,这两个跟踪给出了不同的值(第一个是正确的),我无法弄清楚gotoAndStop()可能如何影响它(以及如何修复它)。

我发现play()不会重现bug,但是prevFrame()和nextFrame()会重现。由于变量是私有的,因此该类甚至不应该访问它来更改它。

另一个奇怪的是,如果将事件监听器更改为FRAME_CONSTRUCTED或EXIT_FRAME,则会出现大量延迟,几秒钟后我的movieClip会随机消失。

感谢您的阅读,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的velocity变量是私有的,因此一个人可以访问该类以外的变量。

但是,getVelocity()正在返回对velocity变量的引用。一旦有人拥有该引用,他们就可以更改其属性的值:getVelocity().y = 3。所以这不可能发生。

解决此问题的一种方法是在trace()中添加getVelocity()语句来设置断点,以便查看其使用位置。

您可以使用Point类执行类似的操作,但是您必须对其进行扩展,为y添加getter / setter方法(在调用它们时追踪它们),并修改你的代码使用getter / setter。这可能是值得的(它很简单),修改代码以使用getter的行为可能会帮助您发现问题所在。