Это абсолютно бессмысленно для меня.
Я звоню gotoAndPlay(1)
каждые 8 кадров:
public function advance():void {
walkDistance += 2;
if(walkDistance >= 16) {
walkDistance -= 16;
// update tile
gotoAndPlay(1);
}
trace(currentFrame);
}
Это внутри моего класса Player. advance () вызывается из моего обработчика ENTER_FRAME.
Однако результатом этого является то, что анимация игрока зацикливает кадры 1,1,2,3,4,5,6,7. Я проверил это, добавив числа от 1 до 8 в качестве текстовых полей в анимации. трассировка (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) один раз, но я получаю кадр 1 дважды.
Что может вызвать это? Я не могу воспроизвести это в любом простом тесте. Это должно быть столкновение с чем-то еще, что я написал, но я не могу понять, что вызвало бы это. Когда именно currentFrame
продвигается по отношению к событию stage ENTER_FRAME
? Возможно ли, что что-то может привести к тому, что это будет пропущено один раз?