Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не получается получить ширину картинки... (http://www.flasher.ru/forum/showthread.php?t=121184)

Sajaxt 09.02.2009 21:02

Не получается получить ширину картинки...
 
Доброе время суток!

Вообщем вопрос таков:
Имеется некий загрузчик, с помощью которого загружается картинка во флэш, когда пытаюсь обратится к ширене данной картинки, выдаёт 0.
Почему или как мне узнать ширину в пикселах?

Вот собственно код:

Код AS3:

...
                        var pic_loader:Loader = new Loader();
                        var pic_url_req:URLRequest = new URLRequest(pic_rote);
                        pic_loader.load(pic_url_req);
                        addChild(pic_loader);
                        trace(pic_loader.width);
...

Зарание благодарен!

Psycho Tiger 09.02.2009 21:19

Ну конечно, пока он загрузит картинку - пройдет некоторое время, пусть даже картинка на локальном носителе - она загрузиться не мгновенно. (не верите - в блоге у __etc самая 1 запись).
Подписывайтесь у Event.COMPLETE, после чего смотрите.

Sajaxt 09.02.2009 21:20

дык так и делаю!

_Smirnoff 09.02.2009 21:21

Нельзя померить ширину/высоту, того чего еще не видно.

Sajaxt 09.02.2009 21:28

дык я ведь меряю после команды AddChild();

musat 09.02.2009 21:35

Можно мерять и без addChild(), ведь свойство width у DisplayObject'ов есть всегда. Главное - дождаться окончания загрузки картинки (о чем и говорил Psycho Tiger)
Код AS3:

function loadPic():void {
        ...
        pic_loader.load(pic_url_req);
        pic_loader.addEventListener(Event.COMPLETE, loadPicHandler);
}
 
function loadPicHandler(e:Event):void {
        trace(pic_loader.width);
}


Sajaxt 09.02.2009 21:38

Код AS3:

package{
        import flash.display.*;
        import flash.net.*;
        import flash.xml.*;
        import flash.events.*;
 
        public class Galery extends Sprite{
 
                private var gal_XML:XML = new XML();                  // Определяем новый xml
                private var xml_rote:String = "gall.xml";  // А таакже путь к нему
                private var url_request:URLRequest = new URLRequest(xml_rote);  // Запрос!!
                private var xml_loader:URLLoader = new URLLoader(url_request); // Загрузчик файла
                private var crnt_pic:Number = 0;    //Номер текущей картинки
                private var pic_cnt:Number = 0;                //Количество картинок               
        //-------------------------------------------------------------------
                public function Galery():void{
                        xml_loader.addEventListener("complete",xml_loaded);
                        gal_XML.ignoreWhitespace=true;
                }
        //-------------------------------------------------------------------
                private function xml_loaded(e:Event):void{
                        gal_XML= XML(xml_loader.data);
                        pic_cnt = gal_XML.item.length();
 
                        trace(gal_XML.item[crnt_pic].cmt);
 
                        load_pic(gal_XML.item[crnt_pic].img);
 
                        xml_loader.removeEventListener("complete",xml_loaded);
                }
        //-------------------------------------------------------------------
                private function load_pic(pic_rote:String):void{
                        var pic_loader:Loader = new Loader();
                        var pic_url_req:URLRequest = new URLRequest(pic_rote);
                        pic_loader.load(pic_url_req);
                        addChild(pic_loader);
                        trace(pic_loader.width);
                        pic_loader.scaleX=0.1;
                        pic_loader.scaleY=0.1;
                }
}


ZlobaZl 09.02.2009 21:38

musat через функцию loadPicHandler(e:Event) делает. Попробуй её с помощью листера на событие мышки показать ширину. Когда её точно увидишь на экране кликай)

Добавлено через 3 минуты
А попробуй поменять addChild(pic_loader);
с Trace
Так:
trace(pic_loader.width);
addChild(pic_loader);

Sajaxt 09.02.2009 21:44

попробывал-бестолку :(

ZlobaZl 09.02.2009 21:49

Самый прикол что выдает 0 а не NaN или Undefined

iNils 09.02.2009 23:47

1. Из справки
Цитата:

О завершении загрузки SWF-файла можно узнать, используя события объекта LoaderInfo, связанные со свойством contentLoaderInfo объекта Loader
contentLoaderInfo (LoaderInfo), а не сам Loader генерит событие. Соответственно подписываться надо к нему.

2. Данные объекта доступны после события Event.INIT, а не Event.COMPLETE

dimarik 09.02.2009 23:51

Цитата:

Сообщение от Sajaxt (Сообщение 796987)
Вообщем вопрос таков:
Имеется некий загрузчик, с помощью которого загружается картинка во флэш, когда пытаюсь обратится к ширене данной картинки, выдаёт 0.

Присоединяюсь к последнему оратору =). Там БОЛЬШИМИ БУКВАМИ НАПИСАНО.

Sajaxt 10.02.2009 00:51

Большое пасибо! Всё работает

willis83 10.02.2009 01:46

А в чём разница между Loader() и download()
Если я правильно понимаю, то loader грузит только картинки и swf, а даунлоад вообще чё угодно может грузить? И куда он это "чё угодно" складывает?

Добавлено через 6 минут
и запуститься ли лоадер если его вызвать как
Код:

var pic_loader:Loader = new Loader(new URLRequest("filename.jpg"));
или только через метод load()?

Добавлено через 19 минут
Я не понял нюанса:
В AS3 reference есть пример который показывает использование Loader() без обработчика событий, просто сразу после load() идёт addChild(). Т.е. когда картинка загрузится, она автоматически попадёт в контейнер видимых объектов(или как там его), но доступа к свойствам не будет пока не произойдёт событие INIT этой картинки??? А почему у Sajaxt loader вызывал событие complete, но не вызывал событие INIT. Как я понимаю сразу после выполнения события complete, автоматически должно происходить событие INIT... или я нифига не понимаю. INIT это инициализации картинке в муве?

BARTLEBY 10.02.2009 03:51

Код AS3:

var pic_loader:Loader = new Loader();
var pic_url_req:URLRequest = new URLRequest(pic_rote);
pic_loader.load(pic_url_req);
pic_loader.contentLoaderInfo.addEventListener(Event.INIT, ImgIsLoaded);
private function ImgIsLoaded(event:Event):void{
        addChild(event.target);
        trace(event.target.width);
        event.target.scaleX=0.1;
        event.target.scaleY=0.1;
}

//

AL.exe 11.02.2009 04:08

Цитата:

или я нифига не понимаю. INIT это инициализации картинке в муве?
Ну, написано же в справочном руководстве:
Цитата:

Dispatched when the properties and methods of a loaded SWF file are accessible and ready for use. The content, however, can still be downloading.


Часовой пояс GMT +4, время: 03:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.