Чтобы бесконечный цикл, вам просто нужно реализовать циклическое поведение вручную, вернувшись к началу в последнем кадре.Обратите внимание, что в этом случае ваши начальный и конечный кадры должны быть идентичны или (в случае непрерывной анимации) представлять плавный переход от конечного кадра к начальному кадру.
Возьмем, к примеру,простая, циклическая анимация - круг, перемещающийся слева направо по экрану.Как только он пересек экран, он возвращается к своей начальной точке.Анимация плавная, так что последний кадр переходит в начальный кадр безупречно:
a b
x x x x x x x
«х» - это круг, а «а» и «b» - начальный и конечный кадры соответственно.Представьте, что экран был очень маленьким.Теперь, если круг перемещается на 10 пикселей в каждом кадре, а его позиция x на кадре «a» равна 20, то его позиция x на кадре «b» должна быть 10, чтобы представить иллюзию плавной непрерывной анимации дляпользователь.В кадре "b" вам понадобится код:
gotoAndPlay('a');
Если анимация не является непрерывной, то есть это анимация остановки и запуска, как в описанном вами случае, то положение круга на кадрах«a» и «b» должны были бы быть идентичны.
И поэтому, специфично для меню на сайте, на который вы ссылаетесь, рамка «a» будет иметь следующие кнопки:
1 2 3 4 5 6 7 8
, тогда как кадр "b - 1" будет иметь следующие кнопки:
8 1 2 3 4 5 6 7
(где "1" в "b-1" - это сколько кадров в анимации от одной кнопки к другой))
и кадр "b" будет идентичен кадру "a".
Теперь, чтобы запрограммировать кнопки для правильной анимации, чтобы вывести нажатую кнопку на передний план, вы можете сделать что-то вродеэто:
var is_transitioning:Boolean = false;
// For each button...
button.addEventListener(MouseEvent.CLICK, animate_menu_on_button_click);
function animate_menu_on_button_click(event:MouseEvent):void
{
if (is_transitioning)
return;
is_transitioning = true;
var target_button:DisplayObject = event.target as DisplayObject;
var end_frame:uint = get_end_frame_by_button(target_button);
stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void
{
if (menu.currentFrame == end_frame)
{
menu.stop();
stage.removeEventListener(e.type, arguments.callee);
is_transitioning = false;
}
});
menu.play();
}
// Note that the end frame is the frame where the button is in 'focus' (at the forefront)
function get_end_frame_by_button(target_button:DisplayObject):uint
{
switch (target_button)
{
case 'button_one':
// etc.
}
}
\ m / \ m /