Мои пользовательские классы загрузки изображений AS3 загружают изображения дважды ... не предполагаемое поведение - PullRequest
0 голосов
/ 12 марта 2012

У меня есть два класса:

Каждый из них связан с символом в библиотеке. dynamic_single_image и dynamic_image, соответственно.

Я перетаскиваю экземпляр dynamic_image на свою временную шкалу ... и основываясь на имени экземпляра movieclip ... У меня есть код inloadMyImage для загрузки имени файла изображения и связанного с ним альтернативного изображения.

В идеале, происходит то, что DynamicImage loadMyImage вызывается (загружает alt изображение) ... это в свою очередь вызывает super.loadMyImage (загружает английское изображение). Должно быть загружено два файла изображения.

ОДНАКО эта пара изображений ЗАГРУЖАЕТСЯ ДВАЖДЫ ... см. Инструкции трассировки ниже.

Мне кажется, что хотя мой экземпляр movieclip имеет DynamicImage ... сначала вызывается конструктор super, а затем конструктор DyanmicImage!

public class DynamicSingleImage extends Sprite
{
    var eLoader:Loader; //for english image

    public function DynamicSingleImage()
    {
        trace("DynamicSingleImage...for: " + this.name);
        loadMyImage();          
    }

    public function loadMyImage () :void 
    {
      ...

      trace( "always load ENGLISH file :" + engFilename );

      ...
    }
  }




public class DynamicImage extends DynamicSingleImage
{
    var aLoader:Loader; //for alternate language image

    public function DynamicImage()
    {
        trace("DynamicImage for: " + this.name);
        this.loadMyImage();

    }

    override public function loadMyImage () :void 
    {
        trace("============= START ========================");
        trace("loading images for mc: " + this.name);

                    ...

        super.loadMyImage(); //first call the super to load the English version
                trace( "load image for alternate language..." + altFilename

                    ...

        trace("============= END ========================");
            }

Это трассированный вывод:

DynamicSingleImage...for: eel_hotspot_content_mc
============= START ========================
loading images for mc: eel_hotspot_content_mc
always load ENGLISH file :eel_hotspot_content.jpg
load image for alternate language...eel_hotspot_content_alt.jpg
============= END ========================
DynamicImage for: eel_hotspot_content_mc
============= START ========================
loading images for mc: eel_hotspot_content_mc
always load ENGLISH file :eel_hotspot_content.jpg
load image for alternate language...eel_hotspot_content_alt.jpg

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Супер-конструктор действительно вызывается первым, когда в расширенном конструкторе отсутствует конкретный вызов. Я думаю, что самым простым решением было бы заставить конструктор быть вызванным вторым и иметь флаг, который проверяется, чтобы увидеть, было ли изображение уже загружено один раз. Смотрите ниже:

public class DynamicSingleImage extends Sprite
{
    var eLoader:Loader; //for english image
    var loaded:Boolean;

    public function DynamicSingleImage()
    {
        trace("DynamicSingleImage...for: " + this.name);

        if (!loaded)
            loadMyImage();          
    }

    public function loadMyImage () :void 
    {
      ...

      trace( "always load ENGLISH file :" + engFilename );

      loaded = true;

      ...
    }
  }




public class DynamicImage extends DynamicSingleImage
{
    var aLoader:Loader; //for alternate language image

    public function DynamicImage()
    {
        trace("DynamicImage for: " + this.name);
        this.loadMyImage();

        super();

    }

    override public function loadMyImage () :void 
    {
        trace("============= START ========================");
        trace("loading images for mc: " + this.name);

                    ...

        super.loadMyImage(); //first call the super to load the English version
                trace( "load image for alternate language..." + altFilename

                    ...

        trace("============= END ========================");
            }
0 голосов
/ 13 марта 2012

Разобрался. Поскольку супер-конструктор вызывается автоматически, я вынул loadMyImage из конструктора моего подкласса.

Вот и все. Теперь это то, что происходит ...

  1. Экземпляр моего мувиклипа на сцене создает DynamicImage
  2. Конструктор DynamicImage автоматически вызывает супер-конструктор
  3. Супер-конструктор вызывает ПЕРЕЗАГРУЗИТЬ loadMyImage в моем подклассе !!!
  4. loadMyImage моего подкласса вызывает super.loadMyImage

Теперь все хорошо. Изображение 'english' загружается из super.loadMyImage ... Изображение 'alt' загружается в loadMyImage подкласса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...