Насколько я знаю, в AS3 нет ничего, что позволяло бы пропускать кадры мувиклипа с заданным интервалом или продвигаться быстрее, чем обычно, посредством анимации на временной шкале. Такие игры, как Zuma, вероятно, либо делают это вручную, либо запускают анимацию без использования временной шкалы для начала.
Чтобы сделать это вручную, у вас есть два основных варианта:
Параметр временной шкалы: (может не стоить этого по причинам, объясненным ниже) Если вы действительно, абсолютно привязаны к анимации временной шкалы, и изменение кадра Тарифы вызывают большие проблемы, и у вас нет времени или технической свободы, чтобы переделывать анимацию с помощью кода, вы, вероятно, можете использовать прослушиватель Event.ENTER_FRAME для вызова функции из каждого из кадров movieClip. проверить stage.frameRate и пропустить следующий кадр или два, если frameRate упал.
Например:
var preferredFrameRate = 24; //use whatever your timeline animations are set to
function skipFramesIfNeeded() {
var currentFrameRate = stage.frameRate;
var speedDifference = 1 - (currentFrameRate / preferredFrameRate);//value between 0-1
if(.5 <= speedDifference < .66) {
gotoAndPlay(this.currentFrame+1);
} else if(.66 <= speedDifference) {
gotoAndPlay(this.currentFrame+2);
}
}
Есть несколько больших проблем с этим, но хуже всего то, что вы можете пропускать только целые кадры - пропуск каждого второго кадра удваивает вашу скорость, пропуск каждых двух кадров - в три раза, и так далее. Так что это будет не так гладко и эффективно, как анимация с помощью кода вместо временной шкалы. Выполнение кода из каждого отдельного кадра анимации также может еще больше замедлить работу.
Только код: Если бы вы могли найти время, было бы намного лучше принять предложения других. Уберите свои анимации с временной шкалы и управляйте ими с помощью кода. Сохраните настройки или множители для анимации и скорости перехода, а также количество пикселей, которые объекты перемещают за кадр.
Затем вы можете сохранить предпочтительный frameRate, сравнить его с stage.frameRate и соответствующим образом настроить множитель. Это позволило бы сгладить градацию скоростей.
Например:
var preferredFrameRate = 24; //or whatever you want this to run at
var defaultSpeedMultiplier = 1;
var speedMultiplier = 1; //this is the multiplier we'll update
function updateAnimationSpeed() {
var currentFrameRate = stage.frameRate; // 18, hypothetically
var speedDifference = 1 - (currentFrameRate / preferredFrameRate); //.25, or a difference of 25%
speedMultiplier = defaultSpeedMultiplier + extraSpeed;
//speed multiplier increases from 1 to 1.25 to make up for less frequent frames
}
Для визуальных состояний, созданных художником, вы можете загрузить пронумерованный набор растровых изображений и переключаться между ними в том порядке, в котором вы будете переходить от одного кадра к другому.
Редактировать: теоретически, вы, вероятно, также можете просто обнаружить изменение и изменить frameRate обратно, но если машина пользователя не может идти в ногу, Flash, вероятно, проигнорирует ее.