Проблема в дуэли с загрузчиком, загружающим одно и то же дважды - PullRequest
1 голос
/ 19 июля 2011

У меня есть символ фона, который выполняет загрузку внешнего jpg-файла, и движок as3, который непрерывно отображает 2 фона на экране. Тем не менее, только один фон может загрузить файл, хотя они «новые» из одного и того же символа. Чтобы протестировать этот феномен urr ..., я обмениваюсь порядком «нового» кода из 2 фонов, затем тот, который вверху, отлично загрузит файл jpg, а другой останется пустым. кто-нибудь сталкивался с этой проблемой раньше? или зная как это решить? Пожалуйста, научите меня. эта внешняя нагрузка мне действительно болезненна с самого начала.

Для кода: (потому что он очень простой, так что я думаю, что могу пренебречь им; извините за неудобства)

Фоновый код

var URLvar:URLRequest;
var fBGLoader : Loader = new Loader( );
URLvar = new URLRequest( "background collection/fyrise/fyriseFront.png" );
fBGLoader.load(URLvar);
this.addChild(fBGLoader);

Код двигателя

private var B1:fBG;
private var B2:fBG;
private var Container= new MovieClip();
BLen=2500;
B2=new fBG();
B1=new fBG();

B1.x=0;
B1.y=0;
B2.x=B1.x-BLen;
B2.y= B1.y;
Container.addChild(B1);
Container.addChild(B2);
stage.addChild(Container);

так что, как вы можете видеть, я ставлю B2 = new fBG () перед B1 = new fBG (), тогда я могу видеть B2, но не B1, и если я обменяю ордер, я могу видеть B1, но не B2. Вот в чем проблема!

Ответы [ 4 ]

1 голос
/ 19 июля 2011

Вы загружаете изображение дважды или только один раз?Если вы загрузите изображение один раз и будете использовать его для обоих объектов fBG, вы столкнетесь с этой проблемой, поскольку у растровых объектов может быть только один родитель (последний addChild (fBGLoader) - единственный работающий, первый будет отменен последующим).).

Чтобы исправить это, необходимо убедиться, что оба объекта fBG имеют свой собственный экземпляр Bitmap (однако они могут совместно использовать одни и те же BitmapData).Поэтому, где бы вы ни работали:

this.addChild(fBGLoader);

Сделайте это вместо:

var img : Bitmap = Bitmap(fBGLoader.content);
this.addChild(new Bitmap(img.bitmapData));

Это будет гарантировать, что каждый объект fBG имеет свой собственный набор координат и информацию для отображения фонового изображения.

0 голосов
/ 19 июля 2011

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

Кроме того, я согласен с некоторыми другими постерами, что, вероятно, лучшезагрузить файл только один раз, а затем скопировать его.Вы можете узнать больше о методах для этого здесь: http://www.adobe.com/devnet/flash/articles/blitting_mc.html.

HTH;

Эми

0 голосов
/ 19 июля 2011

Является ли "фоновый код" классом fBG?И если так, этот код выполняется в конструкторе?Если это так, я думаю, что ваше решение должно работать.Но трудно сказать, не видя немного большего контекста.

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

Кроме того, вам не нужны два отдельных загрузчика, если вы просто хотите двато же изображение.Вы можете просто загрузить изображение один раз, а затем использовать классы Bitmap для создания копии содержимого Loader.

О, и на второй взгляд ваше утверждение:

BLen=2500;

не будетРабота.Вам нужно что-то вроде:

var BLen:Number = 2500;
0 голосов
/ 19 июля 2011

Я собрал небольшой пример на чудо: http://wonderfl.net/c/1dze

Я просто пытаюсь загрузить одно и то же изображение дважды - и это работает. вот код:

package {
  import flash.net.URLRequest;
  import flash.display.Loader;
  import flash.display.Sprite;
  public class FlashTest extends Sprite {

     private var loader1:Loader;
     private var loader2:Loader;

     public function FlashTest() {
        loader1 = new Loader();
        loader2 = new Loader();
        loader2.x = 40;
        loader2.y = 40;

        loader1.load(new URLRequest("http://4.bp.blogspot.com/_zqzgnaU9IiE/TIuSdJyuWsI/AAAAAAAAAA0/4qVZxO503vE/s1600/fat+cat.jpg"));
        loader2.load(new URLRequest("http://4.bp.blogspot.com/_zqzgnaU9IiE/TIuSdJyuWsI/AAAAAAAAAA0/4qVZxO503vE/s1600/fat+cat.jpg"));
        addChild(loader1);
        addChild(loader2);
     }
  }
}

проблема должна быть где-то в вашем коде.

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

1012 * редактировать *

Вы также можете поместить это в два класса следующим образом:

package {
  import flash.display.Sprite;

  public class FlashTest extends Sprite {
    private var bgLoader1:BGLoader;
    private var bgLoader2:BGLoader;

    public function FlashTest() {
        bgLoader1 = new BGLoader();
        bgLoader2 = new BGLoader();
        bgLoader2.x = 40;
        bgLoader2.y = 40;
        addChild(bgLoader1);
        addChild(bgLoader2);
    }
  }
}

, а затем

package {
  import flash.display.Loader;
  import flash.display.Sprite;

  public class BGLoader extends Sprite {
    private var loader:Loader;
    public function BGLoader() {
        loader = new Loader();
        loader.load("URLTOIMAGE");
        addChild(loader);
    }
  }
}
...