【问题标题】:as3 Variables changing impossiblyas3 变量不可能改变
【发布时间】:2013-07-02 16:57:35
【问题描述】:

我遇到了一个问题,即“点”类型变量 velocity 在没有任何更改调用的情况下更改。

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

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

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

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

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

感谢您的阅读,任何帮助将不胜感激。

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    您的 velocity 变量是私有的,因此可以在课堂外访问它。

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

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

    您可以使用 Point 类做类似的事情,但您必须扩展它,为 y 添加 getter/setter 方法(在调用它们时跟踪),并修改您的代码以使用获取器/设置器。这可能是值得的(它很简单),修改代码以使用 getter 的行为可能会帮助您发现问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多