这对我来说毫无意义。
我每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
事件推进一个?有可能某些事情会导致一次被忽略吗?
答案 0 :(得分:0)
Longshot(非常长,但我想帮忙);我在你展示的代码中无法解决任何问题。为什么要拨打walkDistance -= 16;
而不是walkDistance = 0;
?也许你可以追踪walkDistance?如果walkDistance的内容出错,可能是两次调用gotoAndPlay。