Xpoint
   [напомнить пароль]

Динамеческая смена клипа из библиотеки

Метки: [без меток]
2007-12-04 00:31:44 [обр] SeeGo[досье]

Здравствуйте.
Ни как не могу сделать динамическую смену клипа уже имеющегося.
Что дано:
 есть клипы snegurka,snegurka0,snegurka1,snegurka2
snegurka на сцене и сцене называет Snegurka.
К клипам прекреплен класс

class mySnegurkaClass extends MovieClip {
   private var ClipName:String = "snegurka";

   function mySnegurkaClass() {
      createEmptyMovieClip(this._name,0);
    };

   function addClip(x:Number,y:Number) {
        this._x = x;
   this._y = y;
      removeMovieClip(this._name);
      attachMovie(ClipName+sains,this._name,this.getNextHighestDepth());
   };
   
    function MoveTo(Void):Void {
   // Здесь двигаем 

};
   
   function GotoXY(x:Number,y:Number):Void   {
                // здесь выставляем sains в зависимости куда двигается 
      removeMovieClip(this._name);
      attachMovie(ClipName+sains,this._name,this.getNextHighestDepth());
   };
   
   function onEnterFrame(){
 
      this.MoveTo();
   }
};

но код не рабочий, текущий помещенный на сцену клип не изменяется перегружаемым, а после того как чинается движение в разные стороны катастрафически растут экземпляры класса :-(
Как сделать смену мувиков, ткните пожалуйста носом.

Или лучше организовать сменой видимости слоя, както?

спустя 15 часов [обр] Алексей В. Иванов(276/2861)[досье]
Непонятно. Выложите исходник или хотя бы пример.
Что вы хотите реализовать?
спустя 46 минут [обр] SeeGo[досье]

В общем хочу организовать смену изменение движения клипа в зависимости от того в каком направлении движется сам этот клип.
То есть, у нас дано:
на сцене MovieClip: Snegurka
в библиотеке клипов MovieClip:
snegurka0 - Снегурочка выполняет движение типа ходьбы на месте в левую сторону
snegurka1 - Снугурочка стоит
snegurka2 - Снегурочка выполняет движение типа ходьбы на месте в правую сторону

на сцене код

stop();
var ddx = 0;

function sing (x:Number):Number {
   var ret:Number = 0;
   if (x>0.5) ret = 1
      else 
        if (x<-0.5) ret = -1;
   return ret;
   
}

Snegurka.addClip(350,205);

_root.onEnterFrame = function() {
   if (random(100)==1) {
       ddx = random(200);
      if (Snegurka._x>300)  
         Snegurka.GotoXY(Snegurka._x - ddx,Snegurka._y);
        else 
         Snegurka.GotoXY(Snegurka._x + ddx,Snegurka._y);
    }

};

Класс прикреппленный мувикам в библиотеке:

class mySnegurkaClass extends MovieClip {
    private var dx:Number = 0;
   private var dy:Number = 0;
   private var _xMove:Number = 0;
   private var _yMove:Number = 0;
   private var Speed:Number = 2;
   private var sains:Number = 2;   
   private var ClipName:String = "snegurka";

   function mySnegurkaClass() {
      createEmptyMovieClip(this._name,0);
    };

   function addClip(x:Number,y:Number) {
        this._x = x;
      this._y = y;
      removeMovieClip(this._name);
      attachMovie(ClipName+sains,this._name,this.getNextHighestDepth());
   };
   
    function MoveTo(Void):Void {
       if (this.dx!=0) this._x = this._x + this.dx;
      if (this.dy!=0) this._y = this._y + this.dy;
      if (Math.abs(this._x-this._xMove)<Math.abs(this.dx)) this.dx = 0;
      if (Math.abs(this._y-this._yMove)<Math.abs(this.dy)) this.dy = 0;
   };
   
   function GotoXY(x:Number,y:Number):Void   {
      this._xMove = x;
      this._yMove = y;
      var ddx = this._xMove - this._x;
      var ddy = this._yMove - this._y;      
       var R = Math.sqrt(ddx*ddx+ddy*ddy);
       this.dx = ddx*this.Speed/R;
       this.dy = ddy*this.Speed/R;    
      if (dx>0) sains = 2;
         else
            sains = 0;
      removeMovieClip(this._name);
      attachMovie(ClipName+sains,this._name,this.getNextHighestDepth());
   };
   
   function onEnterFrame(){
        
      this.MoveTo();
   }
};

Но это не работает нужным образом как написано выше. Можно ли реализовать как то это по другому?
Я новичек по actionscript и flash по этому выслушаю идеи и как может по другому это реализовано.

Почему класс, да потому что объекты будут добавляться на сцену динамически и также удаляться.
Хотя, вот у меня при написании возникла идея в клипе управлять таймлайном, тоесть разбить тайм лайн на несколько промежутков в которых будет двигаться снегурка в разных направлениях, это ведь проще организовать думаю?

спустя 12 часов [обр] Алексей В. Иванов(276/2861)[досье]
Если снегурочка, идущая налево получена зеркальным отражением правой, то не надо лишних клипов — достаточно _xscale менять с 100 на -100. В принципе, вы зря паритесь с добавлением и удалением клипов. Сделали бы все нужные фазы внутри одного клипа, разнесли бы их по кадрам и делали б this.gotoAndStop(n), где n, например 1, если снегурка идет налево, 2, если стоит и 3, если идёт направо.
спустя 3 часа 56 минут [обр] SeeGo[досье]
Впринципе так и попробовал вчера сделать, не совсем правда всё получилось (6 день разбираюсь во флеше). Но это выход делать раскадровку движения в одном клипе, спасибо.
Powered by POEM™ Engine Copyright © 2002-2005