На новом слое я сделал бы новый мувиклип, который собирается быть контейнером из кадров и управления, которые, чтобы остановить с помощью таймера.
Просто нарисуйте коробку с цветом заливки (без границы). Та же ширина & высота, как ваша сценическая, выровняйте до вершины & Влево (под Modify-> Align с отметкой «Align to stage»). Теперь это идеальное место для сцены, а затем преобразуйте его в movieClip (убедитесь, что регистрация установлена как черная точка сверху/слева .. не центрированная точка).
Назовите это так, как вы хотите, но дайте ему имя экземпляра animMC (вы можете изменить это позже).
Теперь выберите весь диапазон кадров анимации и выберите «вырезать кадры» в меню правой кнопки мыши. Дважды щелкните анимационный клип animMC, чтобы ввести его временную шкалу, удалить форму окна и щелкнуть правой кнопкой мыши по первому кадру и «вставить кадры».
Теперь в вашем коде вы можете остановить его, как это:
package com.preview {
import flash.utils.Timer;
import flash.events.TimerEvent
import flash.utils.getTimer;
import flash.display.MovieClip;
public class looptimer extends MovieClip
{
var startTime:int = 0;
var allowedTime:int = 5000;
var loopTime:int = 0;
public function looptimer()
{
var myTimer:Timer = new Timer(5000, 1); //count before doing function "timerListener" the 1 means do once else it will loop forever
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
myTimer.start();
function timerListener (e:TimerEvent):void
{
trace("Timer countdown finished");
animMC.stop(); //anim stops
}
}
}
}
========================
EDIT 2:
Привет, этот код проверяет событие, вызванное в конце вашего анимации. Для того, чтобы иметь такое событие идти в MC, который содержит кадры и на последнем кадре (и на пустой слой) добавить действия код: (Это будет вещь, которая
dispatchEvent(new Event("Banner_end)")); //end frame
Это будет эквивалентно получать вашу «конец кадра» в код ниже события прилагается к данной инструкции:.
animMC.addEventListener("Banner_end", check_Time);
это означает, что по достижении конечного кадра мероприятие под названием «Баннер конец» является послан с таймлайн, в свою очередь, выполняет функцию check_Time и другая функция (см. код).
Теперь этот код ниже проверяет время и таймер, когда было отправлено событие «конечный кадр», и выясните, достаточно ли времени для второго цикла или более. Две вещи влияют на время, в течение которого MC может зацикливаться.Во-первых, это ограничение по времени, тем дольше, чем больше циклов вы будете соответствовать этому пределу. Во-вторых, длина анимации MC, которая, если более короткие средства, может соответствовать большему количеству циклов в течение срока. Отрегулируйте эти две вещи. Самый простой - это ограничение по времени, потому что вы просто изменяете число («allowed_playing_Time») для тестирования, но позже, когда у вас нет контроля над лимитом, вы при необходимости настраиваете кадры баннера (anim MC), добавляя/отбрасывая кадры.
package com.preview
{
import flash.utils.*;
import flash.events.*;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.utils.getTimer;
import flash.display.MovieClip;
import flash.events.Event;
public class looptimer extends MovieClip
{
var allowed_playing_Time:int = 10; //time limit in seconds
var play_Count:int = 0; //tracking number of times played
var can_play_Amount:int = 1; //total times can be played
var _startTime:Date;//Number;
var _endTime:Date;//Number;
//for time check using actual [computer] clock = more accurate than timer
var real_Time:Date;
var anim_start_time:int;
var anim_end_time:int;
var anim_play_length:int;
public function looptimer()
{
//starting the Banner
play_Banner_anim();
}
function play_Banner_anim():void
{
animMC.stop(); //set strating banner state as paused;
_startTime = real_Time = new Date();//Real Time value initial set here
trace("current time at START is: " + _startTime.minutes + " mins past and " + _startTime.seconds + " secs");
animMC.addEventListener("Banner_end", check_Time);
animMC.addEventListener("Banner_end", calculate_Replay);
anim_start_time = getTimer();
animMC.play();
}
function check_Time(e:Event):void
{
animMC.stop(); trace("Banner has reached last frame");
animMC.removeEventListener("Banner_end", check_Time);
play_Count = play_Count + 1;
trace("Times banner has played/looped): " + play_Count);
_endTime = real_Time = new Date();//new update of Real Time value
trace("current time at END is: " + _endTime.minutes + " mins past and " + _endTime.seconds + " secs");
anim_end_time = getTimer();
anim_end_time = Math.ceil(anim_end_time);
anim_play_length = Math.round(Math.floor(anim_end_time - anim_start_time)/1000);
anim_play_length = anim_play_length;
trace("checking if Real Time: ");
var date1:Date = _startTime;
var date2:Date = _endTime;
var elapsed1:Number = Date.UTC(date1.minutes,date1.seconds);
var elapsed2:Number = Date.UTC(date2.minutes,date2.seconds);
var playingTime:Number = Math.round((elapsed2/1000) - (elapsed1/1000));
trace ("time elasped (delta) is " + playingTime);
//check seconds elapsed in banner playback (i.e total play length)
trace("Banner total playing length was " + anim_play_length + " seconds");
//so how many times can banner play within allowed time limit?
var can_fit_Num:Number = allowed_playing_Time/anim_play_length;
trace("can fit this many plays in allowed time limit: " + can_fit_Num);
can_play_Amount = can_fit_Num;
trace("can_play_Amount is : " + can_play_Amount);
if (can_play_Amount <= 0)
{
trace("Warning: Banner Anim is either longer than allowed time limit or has a play length of zero");
}
}
function calculate_Replay(e:Event):void
{
trace("Calculating replay function :::::: ");
trace("Play/looped amount is: " + play_Count);
trace("Can play amount times is : " + can_play_Amount);
if (play_Count < can_play_Amount)
{
trace("anim_play_length is:" + anim_play_length);
replay_tings();
trace("replaying anim");
}
else
{
animMC.stop();
trace("reached replaying times (" + can_play_Amount + ") available within limit (" + allowed_playing_Time + " secs)");
if (can_play_Amount <= 0)
{ trace("Warning: Banner Anim is either longer than allowed time limit or has a play length of zero"); }
//do something else. Currently just stops since no time for replay
}
}
function replay_tings():void
{
animMC.addEventListener("Banner_end", calculate_Replay);
animMC.play();
play_Count = play_Count + 1;
trace("Play Count/loops: " + play_Count);
}
}
}
Надеюсь, это поможет. Я поставил много следов, чтобы дать вам обратную связь. Удалите все, что вам кажется ненужным, и, конечно, вы можете оптимизировать код, если вы что-то заметили.
У вас есть куча фреймов на шкале времени, и вы пытаетесь заставить все это остановить/приостановить таймер? –
Да, у меня есть анимация на временной шкале, которая играет. Идея сценария - время анимации и остановка анимации через определенное количество времени. Например, я могу позволить анимации работать в течение 30 секунд. Я забуду первый цикл и посмотрю, сколько времени потребовалось для анимации, со времени первого цикла я вижу, есть ли у меня достаточно времени для повторного цикла или если я просто остановлю анимацию. Я хотел создать код, который мог бы использоваться во множестве разных проектов. –
Хорошо, я могу помочь вам с первой частью. Установите время работы и остановитесь, когда отсчет закончится, но я не получаю вашу точку на второй части. Вы говорите, что анимация может длиться 1 минуту, если она работает в течение 30 секунд, тогда вы хотите, чтобы код оценивал, что еще 30 секунд остаются и снова воспроизводятся? Вы думаете о том, чтобы держать отсчет кадров во времени против времени? Я передам вам несколько инструкций в ответе, после чего мы улучшим с помощью комментариев ... –