Встроенные свойства изображения в загрузчике - PullRequest
1 голос
/ 17 августа 2010

Эй, я немного новичок в AS3, но я пытался как можно больше изучать и читать LiveDocumentation, и все же я не могу решить эту проблему:

Есть загрузчик, который я заполняю разными изображениями в зависимости от нажатой кнопки. Теперь, чтобы держать это в порядке, я использую точно такой же загрузчик. Проблема в том, что независимо от того, что я делаю с изображением, следующее загруженное изображение всегда получает свойства предыдущего. Я использовал unload, и Loader возвращает 0 по ширине и высоте, и все же следующее изображение получает предыдущее изображение с ч / ч. Другие попытки отделить его от родительского контейнера и удалить его из списка отображения, а также использовать Event.UNLOAD, чтобы убедиться, что предыдущее изображение отсутствует перед загрузкой нового изображения.

Сценарий будет довольно длинным, но основы будут такими,

BrowserLoad.unload();
BrowserReq = new URLRequest("ImageB.jpg"); 
BrowserLoad.load(BrowserReq); 

BrowserLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, Resize);

function Resize (event:Event):void {
/*
And here a big bunch of resizing and scaling of the image loaded that i need to do, is this what's provokin' the later unwanted resizeings!?
*/
}

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

Ответы [ 2 ]

2 голосов
/ 17 августа 2010

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

Объект Loader - это не загруженный вами ресурс, в данном случае растровое изображение, а скорее контейнер, в котором загруженный ресурс является дочерним DisplayObject. Поэтому, когда вы применяете преобразования к загрузчику, например: высоту или ширину, вы изменяете не преобразование загруженного актива, а его родительский контейнер, экземпляр Loader. В результате, если вы измените загруженный ресурс, т. Е. Выгрузите и загрузите новый, эти преобразования все еще будут в силе.

Как правило, в своем собственном коде я никогда не использую объекты Loader в качестве объектов DisplayObject и использую их строго для загрузки внешнего контента. После загрузки актива вы можете получить ссылку на него напрямую через свойство содержимого загрузчиков, например:

myLoader.content

А затем используйте его в любом месте и добавьте в список отображения напрямую.

Если вы хотите использовать загрузчик для отображения, вы можете сбросить все преобразования следующим образом:

myLoader.transform.matrix = new Matrix();

Надеюсь, это поможет,

0 голосов
/ 17 августа 2010

Если вам нужно сделать этот класс статическим, в классе BrowserLoad сделайте это вместо

public static function loadImage(url:String):void
    {
        var loader:Loader = new Loader();
        var info:LoaderInfo = loader.contentLoaderInfo;

        //add your event listeners here, just adding one for now...
        info.addEventListener(Event.COMPLETE , completeHandler );

        var request:URLRequest = new URLRequest( url  );
        loader.load( request , new LoaderContext(true) );

    }

Как рекомендует Тайлер Эджето, примените преобразование к контенту:

 public function completeHandler(event:Event):void
 {
     var content:DisplayObject = event.currentTarget.content;
  }

Я думаю, что это решение на самом деле сделает его более аккуратным, экземпляры загрузчика строго используются для загрузки вашего контента, и ничего больше, если вам затем нужно манипулировать вашим контентом вне вашего completeHandler, у вас все еще есть несколько доступных решений, например store ваши изображения в массиве или векторе растровых изображений или объектов DisplayObject. Таким образом вы избежите потенциальной путаницы между свойствами загрузчика и свойствами загруженного содержимого.

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