Показать сообщение отдельно
Старый 24.04.2010, 22:29
mickfallout вне форума Посмотреть профиль Отправить личное сообщение для mickfallout Найти все сообщения от mickfallout
  № 5  
Ответить с цитированием
mickfallout
 
Аватар для mickfallout

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
сделал так(первый вариант):
Код AS3:
package  
{
   import flash.display.MovieClip;
   import flash.display.Sprite;
   /**
    * ...
    * @author mick
    */
   public class UnitAnimation extends Sprite
   {
      static public const UNIT_BODY_MAN:String = "Man";
      static public const UNIT_EQUIPMENT_AK:String = "AK_Equipment";
      public function UnitAnimation(bodyType:String, equipment:Array=null)
      {
         var i:int = 0;
         super();
         if (equipment == null)
            equipment = [];
         addChild(Main.newMovieClip(bodyType));//функция Main.newMovieClip(imageName:String):MovieClip - выдает мувик из файла ресурсов
         while (i < equipment.length)
            addChild(Main.newMovieClip(equipment[i++]));
         gotoAndStop(0);
      }
 
      public function gotoAndStop(frame:Object, scene:String = null):void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).gotoAndStop(frame, scene);
      }
 
      public function get currentFrame():int
      {
         if (numChildren > 0)
            return MovieClip(getChildAt(0)).currentFrame;
         return 1;
      }
 
      public function get totalFrames():int
      {
         if (numChildren > 0)
            return MovieClip(getChildAt(0)).totalFrames;
         return 1;
      }
 
      public function gotoAndPlay(frame:Object, scene:String = null):void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).gotoAndPlay(frame, scene);
      }
 
      public function stop():void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).stop();
      }
 
      public function play():void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).play();
      }      
      public function nextFrame():void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).nextFrame();
      }
 
      public function prevFrame():void
      {
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).prevFrame();
      }
 
      public override function set mouseEnabled(value:Boolean):void
      {
         super.mouseEnabled = value;
         var i:int = numChildren;
         while (i-- > 0)
            MovieClip(getChildAt(i)).mouseEnabled=value;         
      }
 
      public override function get mouseEnabled():Boolean
      {
         return super.mouseEnabled;
      }
 
      public function setEquipment(equipment:Array, playAnimation:Boolean = true):void
      {
         var i:int = numChildren;
         while (i-- > 1)
            removeChildAt(i);
         i = numChildren;
         while (i < equipment.length)
            addChild(Main.newMovieClip(equipment[i++]));
         if (playAnimation)
            gotoAndPlay(currentFrame);
         else
            gotoAndStop(currentFrame);
      }
   }
 
}
Не нравится мне такой вариант =(
Думаю второй был бы быстрее... Но с ним не знаю как лучше сделать смену изображений в зависимости от кадра (собственно анимацию). Просто подписать обработчик события EnterFrame с сменой битмапДаты? Не будет ли это слишком долго?


Последний раз редактировалось mickfallout; 24.04.2010 в 22:33.