ActionScript: добавление нескольких экземпляров одного и того же файла SWF на сцену - PullRequest
1 голос
/ 06 июня 2011

Я создаю игру в ActionScript 3.0 с использованием игрового движка FlashPunk и FlashDevelop SDK. Я создал свой собственный класс MovieClip, который принимает предварительно загруженный файл видеоклипа.

public function MyMovieClip(file:MovieClip, posX:int, posY:int, frameRate:int) 
    {
        movieClip = file;
        movieClip.x = posX;
        movieClip.y = posY;
        movieClip.stop();
        FP.stage.addChild(movieClip);


        timer = new Timer((1 / frameRate) * 1000);
        timer.start();
        timer.addEventListener(TimerEvent.TIMER, onTick);
    }

Обновление для моего видеоролика выглядит следующим образом:

private function onTick(e:TimerEvent):void
    {
        if (isRepeating)
        {
            if (movieClip.currentFrame == movieClip.totalFrames )
            {
                movieClip.gotoAndStop(0);
            }
        }
        movieClip.nextFrame();
    }

Проблема, с которой я сталкиваюсь, заключается в том, что когда у меня есть несколько экземпляров класса MyMovieClip, использующих один и тот же файл swf, отображается только последний экземпляр и обновляется для каждого экземпляра класса, который у меня есть (например, 3 экземпляра). MyMovieClip, последний экземпляр обновлений в 3 раза быстрее.)

Если понадобится дополнительная информация, я с радостью ее предоставлю.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Вы можете создать новый экземпляр того же самого загруженного SWF, выполнив это:

  // re-use a loaded swf
  var bytes:ByteArray = existingLoader.content.loaderInfo.bytes;
  var loader:Loader = new Loader();
  loader.loadBytes(bytes);

гдеistingLoader - это загрузчик, который вы использовали для загрузки SWF-файла.

Загрузчик, используемый с loadBytes, отправит другое событие COMPLETE, поэтому, когда вы делаете для этого слушателя, вы можете использовать «клонированную» версию:

  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFClonedComplete);
1 голос
/ 06 июня 2011

У вас может быть несколько экземпляров MyMovieClip, но что с file:MovieClip, которое вы добавляете на сцену.Если это всегда один и тот же экземпляр MovieClip, у вас будет этот результат, независимо от того, как часто вы создаете экземпляр своего класса MyMovieClip, потому что вы добавляете один и тот же экземпляр несколько раз на сцену.

Возможно, вам придетсязагрузить «предварительно загруженный клип» несколько раз или, если вы можете (вы знаете имя класса и т. д.), создать новый экземпляр нужного класса с помощью getDefinitionByName() из загруженного клипа и присоединить этот новый экземпляр.

...