这对我来说绝对没有意义。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获得第一帧两次。
这是什么原因造成的?我无法在任何简单的测试中重现这一点。它必须与我写过的其他东西发生冲突,但我看不出会导致它的原因。 currentFrame
与stage ENTER_FRAME
事件相关时,是否会提前一个?是否有可能导致此事被跳过一次?
哦,我也重载gotoAndStop这是不被称为:( –
什么是walkDistance初始值 – danii
@danii:0。walkDistance东西是所有工作的罚款,他精美的导航网格:d –