Показать сообщение отдельно
Старый 13.08.2013, 12:04
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 1  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
По умолчанию MovieClip: проиграть нужное число раз

Есть мувиклип Tw1, содержащий моушн-твин.
К нему привязан класс Tw1, через галочку Export to ActionScript.

Необходимо вывести его на стэйдж и проиграть определенное количество раз, а затем остановить.

На первый взгляд вроде бы простая задача, но очевидного решения придумать не удалось.
Поиском по форуму нашел вот этот пост, в котором есть похожие мотивы.

В результате получился такой код:
Код AS3:
package
{
	  import flash.display.*;
	  import flash.events.*;
	  import flash.text.*;
 
	  public class Main extends Sprite
	  {
 
			  private var tw1:Tw1;
			  private var txt1:TextField;
			  private var playCounter:uint = 1;
 
			  public function Main()
			  {
				  //--- Выводим мувиклип ---//
				  tw1 = new Tw1();
				  tw1.x = 100;
				  tw1.y = 100;
				  tw1.name = "Instance1";
				  addChild(tw1);
 
				  //--- Выводим счётчик фрэймов ---//
				  txt1 = new TextField();
				  txt1.x = 10;
				  txt1.y = 300;
				  txt1.autoSize = TextFieldAutoSize.LEFT;
				  txt1.text = "None";
				  addChild(txt1);
 
				  tw1.addEventListener(Event.ENTER_FRAME, cycleListener);
			  }
 
			  private function cycleListener(e:Event):void
			  {
 
 
					  txt1.text = e.currentTarget.currentFrame.toString();
 
					  if (e.currentTarget.currentFrame == e.currentTarget.totalFrames  && playCounter <= 3)
					  {
							playCounter ++;
					  }
					  else if (playCounter > 3)
					  {
							tw1.stop();
							e.currentTarget.removeEventListener(Event.ENTER_FRAME, cycleListener);
//							removeChild(e.currentTarget);  
					  }
 
			  }
 
	  }
 
 
}
Вобщем, всё работает ОК, но есть два вопроса:

1. Есть ли другой способ решить эту задачу? Странно, но похоже на то, что нет.
Ведь обязательно нужно знать момент окончания мувиклипа, а это достигается только условием
Код AS3:
e.currentTarget.currentFrame == e.currentTarget.totalFrames
и вроде бы никак иначе.
Выходит, никакими там комбинациями методов stop(); gotoAndStop(); play(); и т.п. это сделать нельзя.

2. Не понимаю, почему не работает строка:
Код AS3:
//							removeChild(e.currentTarget);
если ёё раскомментировать, то будет получена ошибка:
Цитата:
1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display: DisplayObject.
removeChild(e.currentTarget);
Чего-то чтоли уже не существует, или нужно преобразование типов?