Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как достать ширину загруженной картинки? (http://www.flasher.ru/forum/showthread.php?t=100333)

venegy 25.08.2007 02:32

Как достать ширину загруженной картинки?
 
Проблема в том, что трейс показывает НОЛЬ. Помогите.
Код:

_root.createEmptyMovieClip("imageHolder",1);
_root.imageHolder.loadMovie("image_1.jpg");
trace(_root.imageHolder._width);


udaaff 25.08.2007 03:04

Код:

this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
//
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
        trace(target_mc._width)
};
//
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("asdf.jpg", image_mc);


Torero 25.08.2007 03:06

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

venegy 25.08.2007 04:46

Постепенно подхожу к цели, но возникла следующая проблема: как достать значение ширины, чтобы использовать его вне функции loadImage?
Код:

function loadImage(mc, img){
/*        mc - куда кладем картинку,
        img - имя картинки для загрузки
        */
        var mclListener:Object = {};
        mclListener.onLoadInit = function(target_mc:MovieClip)
        {
                mclListener.onLoadInit.imgWidth = target_mc._width;
                trace(mclListener.onLoadInit.imgWidth); //здесь получаем ширину картинки, которую необходимо использовать извне (там, где уже вызывается функция loadImage)
        }
        mclListener.onLoadComplete = function()
        {
        delete image_mcl;// delete mclListener;
        }
        var image_mcl:MovieClipLoader = new MovieClipLoader();
        image_mcl.addListener(mclListener);
        image_mcl.loadClip(img, mc);}


Mr. Fixit 25.08.2007 13:10

venegy
ты сначала задай ширину пустому мувиклипу.

udaaff 25.08.2007 13:55

to Mr. Fixit: зачем?

to venegy: ты можешь узнать ширину мувика, только по наступлению события onLoadInit (т.е. картинка твоя не загружается мгновенно), вот и думай исходя из этого.

Wolsh 25.08.2007 15:47

Знаю, что это типа муветон, но я просто в _root переменную завожу или в _global. Соотв. пишешь в онЛоадИнит
Код:

_root.imgWidth = target_mc._width;
и дальше используешь ссылку _root.imgWidth

venegy 25.08.2007 16:12

Пробовал. Так не получается. Проблема как раз в том, что переменная не принимает нужные значения (onLoadInit отрабатывает позже, чем я обращаюсь к переменной...).
udaaff, ты намекал на что-то... Может, мне структуру функций переделать. Прежняя была такая:
loadImage(mc, img)
mc - куда кладем картинку,
img - имя картинки для загрузки
внутри неё - функция для обработчика onLoadInit (которая давала нужный мне параметр - ширину загружаемой картинки)

Далее я Вызываю первичную функцию loadImage(mc, img) в цикле для загрузки картинок. Но! Мне нужна ширина картинки. Накапливая ширину каждой загруженной картинки в переменную в этом цикле я получу возможность расставлять картинки одну за другой (в длинную колбасу). Может, изначально логика неверная? Спасибо за участие.

Wolsh 25.08.2007 17:00

>>onLoadInit отрабатывает позже, чем я обращаюсь к переменной

Тогда, простите, чью ширину Вы хотите использовать? Картинки-то еще нет
Да, логика неверная

Цикл выдает несколько тысяч итераций в секунду, т.е. Вы начнете грузить картинки одновременно, а вот время, за которое они будут загружаться, зависит от их веса. Таким образом шестая картинка может загрузиться раньше всех - куда Вы ее поставите, если ширина остальных еще не известна? Выход - грузить картинки по-очереди, не в цикле, а загружая следующую по событию онЛоадКомплит предыдущей. Или вар.2 - загрузить все картинки в одну пачку в невидимом мувике, сделать его видимым и пересчитать координаты всех картинок. Или вар.3 - отображать некие ячейки одного размера, возможно с прелоадером внутри, при окончании загрузки каждой картинки вызывается функция пересчета всей колбасы - получится динамическая такая загрузка :)

venegy 25.08.2007 18:29

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


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

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