gotoAndPlay“粘贴”在两帧的目标帧上

时间:2011-10-07 14:02:11

标签: actionscript-3

这对我来说毫无意义。

我每8帧调用一次gotoAndPlay(1)

public function advance():void {
    walkDistance += 2;
    if(walkDistance >= 16) {
        walkDistance -= 16;
        // update tile
        gotoAndPlay(1);
    }

    trace(currentFrame);
}

这是在我的Player类中。从我的ENTER_FRAME处理程序调用advance()。

然而,结果是播放器动画循环帧1,1,2,3,4,5,6,7。我通过在动画中添加数字1到8作为TextFields来检查这一点。 trace(currentFrame)同意,我得到第1帧

我确定我在其他任何地方调用gotoAndPlay。我通过重载检查了这个:

override public function gotoAndPlay(frame:Object, scene:String = null):void {
    super.gotoAndPlay(frame, scene);
    trace("GOTOANDPLAY " + frame);
    trace((new Error).getStackTrace());
}

两组跟踪的结果如下:

GOTOANDPLAY 1
Error
    at com.nitrome.blank::Player/gotoAndPlay()
    at com.nitrome.blank::Player/advance()
    at com.nitrome.blank::Level/advance()
at com.nitrome.blank::Controller$/enterFrame()
1
1
2
3
4
5
6
7
GOTOANDPLAY 1
Error
    at com.nitrome.blank::Player/gotoAndPlay()
    at com.nitrome.blank::Player/advance()
    at com.nitrome.blank::Level/advance()
    at com.nitrome.blank::Controller$/enterFrame()
1
1
2...

所以你可以看到我正在调用gotoAndPlay(1)一次,但是我得到第2帧。

这会导致什么?我无法在任何简单的测试中重现这一点。它必须与我写过的其他东西发生冲突,但我看不出会导致什么。恰好currentFrame相对于stage ENTER_FRAME事件推进一个?有可能某些事情会导致一次被忽略吗?

1 个答案:

答案 0 :(得分:0)

Longshot(非常长,但我想帮忙);我在你展示的代码中无法解决任何问题。为什么要拨打walkDistance -= 16;而不是walkDistance = 0;?也许你可以追踪walkDistance?如果walkDistance的内容出错,可能是两次调用gotoAndPlay。