2009-05-30 2 views
5

Я хочу анимировать объекты MoviveClips/Sprite как можно более сглаженными. Однако пока единственный способ, который работает, заключается в размещении кода движения в обработчике событий EnterFrame. Существует одна проблема с этим подходом: когда частота кадров на конкретной машине ниже требуемой частоты кадров, тогда вся игра замедляется. Я хочу иметь возможность делать это не зависящим от времени способом.ActionScript 3: Плавная программная анимация

ответ

12

Существует два способа сделать программную анимацию внутри Flash-плеера. Первое, что вы указали с помощью onEnterFrame. Однако, как вы уже заметили, чтобы получить гладкую анимацию, вам нужно увеличить общую частоту кадров вашего фильма. Это также увеличит загрузку процессора за весь период работы вашего SWF. Это не то, что вы всегда хотите.

Другой способ выполнения программной анимации - использовать таймер. Внутри обработчика таймера можно вызвать функцию с именем updateAfterEvent, которая будет обновлять экран независимо от FPS, который вы установили для вашего SWF. Поэтому использование таймера оставляет шлюз для выполнения плавной анимации внутри Flash-проигрывателя без увеличения общей частоты кадров вашего SWF.

Два года назад или около того я решил создать свои собственные библиотеки твинов для Flash (из-за моих разочарований с имеющимися тогда существующими библиотеками твинов). Я выпустил его под именем Coretween, и эта библиотека позволяет вам, среди прочего, выбирать, какую анимацию вы предпочитаете для каждой отдельной анимации. На странице документации я даю example разницу между фреймовой и временной анимацией. Пример SWF на этой странице работает со скоростью 12 кадров в секунду, но, как вы можете видеть, нижний круг более плавный, потому что он контролируется таймером, который гаснет со скоростью 60 кадров в секунду и обновляет экран, зависящий от частоты кадров SWF. Имейте в виду, что даже таймер с отметкой 60 кадров в секунду, Flash Player никогда не сможет достичь этой частоты кадров. Тем не менее, он попытается достичь этой частоты кадров, что приведет к гораздо более плавной анимации.

К сожалению, до сих пор я не смог опубликовать версию моей версии 1.0, но насколько я знаю, она довольно стабильна. Вы более чем можете использовать его любым способом, который вам подходит. Я использовал Coretween во многих коммерческих продуктах, включая этот, который мы сделали для банка StGeorge здесь, в Австралии.

+0

Удивительный! Только то, что мне нужно. Я буду ждать с accept, так что вы можете получить больше upvotes :) – George

+0

Спасибо. Когда ответы принимаются, люди все еще могут голосовать. :) – Luke

+0

Вопросы без принятых ответов обычно привлекают больше внимания. Большинство пользователей не утруждают себя ответом после принятия. – George

2

Вот несколько анимационных библиотек на базе Actionscript:

TweenMax

Tweener

Они оба хорошо работают, и должны помочь вам с тем, что вам нужно.

+0

К сожалению, нет, так как мне нужен плавный контроль над моими объектами в реальном времени. Метод tweener, который гарантирует, что иногда в будущем объект прибудет в нужное положение, будет «ungood». – George