2011-10-07 22 views
0

这对我来说绝对没有意义。gotoAndPlay对目标帧“坚持”两帧

我打电话gotoAndPlay(1)每8帧:

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

    trace(currentFrame); 
} 

这是我的播放器类中。 advance()从我的ENTER_FRAME处理程序被调用。

但是,结果是玩家动画循环帧1,1,2,3,4,5,6,7。我通过在动画中将数字1到8添加为TextFields来检查此问题。跟踪(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)一次,但我m获得第一帧两次。

这是什么原因造成的?我无法在任何简单的测试中重现这一点。它必须与我写过的其他东西发生冲突,但我看不出会导致它的原因。 currentFramestage ENTER_FRAME事件相关时,是否会提前一个?是否有可能导致此事被跳过一次?

+0

哦,我也重载gotoAndStop这是不被称为:( –

+0

什么是walkDistance初始值 – danii

+0

@danii:0。walkDistance东西是所有工作的罚款,他精美的导航网格:d –

回答

0

Longshot(很长,但我想帮忙);我不能在你展示的代码中找出任何东西。你为什么叫walkDistance -= 16;而不是walkDistance = 0;?也许你可以追踪walkDistance?如果walkDistance出现问题,可能会调用gotoAndPlay两次。

+0

其实我同意你'walkDistance = 0'可能更好,但实际上,没有任何变化的方式:( –