Форум 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=73827)

vecalion 04.01.2006 18:47

Загрузка и присоединение картинок
 
Код:

someclass {
private var display:MovieClip;

private var m1:MovieClip;
private var m2:MovieClip;

public void someMethod():Void
{
  display = _root.createEmptyMovieClip("display",1);
  display._x = 10;
  display._y = 10;
  ...
               
  loadMovie("image1.jpg", m1);
  loadMovie("image2.jpg", m2);
  ...
}
}

Надо сделать некую предзагрузку картинок. Можно ли каким-то образом отобразить содержимое, к примеру, m1 на мувике display? Либо надо для отображения каждый мувик присоединять к _root, ставить на нужное место и менять _visible? Не хочется совершать лишние телодвижения.

Antares 04.01.2006 19:05

Не очень ясна задача. Предзагрузку сделать не проблема. Позиционировать тоже. Но что значит "отображать m1 на мувике display" -- ? Поместить внутрь него нельзя -- только загружать в заранее соданный в нем.

К слову говоря, в AS3 можно любой визуальный объект прицепить любому -- очень удобно :)

vecalion 05.01.2006 13:10

Цитата:

Сообщение от Antares
Не очень ясна задача. Предзагрузку сделать не проблема. Позиционировать тоже. Но что значит "отображать m1 на мувике display" -- ? Поместить внутрь него нельзя -- только загружать в заранее соданный в нем.

К слову говоря, в AS3 можно любой визуальный объект прицепить любому -- очень удобно :)

Попытаюсь объяснить задачу. Необходимо, чтобы флеш ролик отображал некие загружаемые с сервера объекты (текст + картинка). Отображение происходит по одному объекту. Смена объектов либо по таймауту, либо по желанию пользователя (Next). Для того, чтобы уменьшить нагрузку на сервер, а также чтобы не заставлять пользователя ждать при мануальной смене картинок, был выбран следующий алгоритм: при инициализации, ролик запрашивает с сервера 2 * n объектов. В последующем, после показа n объектов, ролик подгружает еще n объектов.

Для хранения загруженных объектов в памяти можно использовать 2 массива - массив строк для текста и массив мувиков для картинок. Если при отображении объекта для массива текста всё ясно, то для массива мувиков не совсем...

Можно:

1) создать n мувиков, используя createEmptyMovieClip(), выставить им _visible = false, загрузить в них картинки, и при отображении прятать предыдущий мувик, вычислять и выставлять следующему мувику правильные координаты (ибо они постоянно динамически изменяются), показывать его.

2) (то, что я коряво пытался объяснить в первом посте) объявить n мувиков, загрузить в них требуемые картинки, создать один мувик привязанный к какой-то шкале, который сам будет следить и передвигаться в нужные координаты, и при отображении - копировать/переносить/ещечтото мувик с картинкой из памяти в отображаемый мувик

Если (1) реализуемо, но не очень красиво, то на счет реализуемости (2)-ого я сомневаюсь. Я не флешер, поэтому возможно запутался в каких-то элементарных вещах, отсюда и вопрос.

silin 05.01.2006 15:04

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

import flash.display.*;
class Someclass {
private var images:Array=[];
public var onLoad:Function;
public var length:Number;
        //грузим, копируем, удаляем
        public function load(urls:Array){
                images=[];
                length=urls.length;
                var o=this;
                for(var counter=length,i=length;i--;){
                        var ml =new MovieClipLoader();
                        ml.tag=i;
                        ml.mc=_root.createEmptyMovieClip('tmp'+i,_root.getNextHighestDepth());
                        ml.imgs=images;
                       
                        ml.onLoadInit=function(){
                                var bmp=this.imgs[this.tag]=new BitmapData(this.mc._width,this.mc._height);
                                bmp.draw(this.mc);
                                this.unloadClip(this.mc);
                                this.mc.removeMovieClip();
                                if(!--counter)o.onLoad();
                        }
                        ml.loadClip(urls[i],ml.mc);
                }
        }
        //аттачим битмап в мувик where( для примера..
        public function displayImage(where:MovieClip,num:Number){
                where.attachBitmap(images[num],where.getNextHighestDepth());
        }
}
///////////////пример/////////////
var imageLoader=new Someclass();
imageLoader.load(['p0.jpg','p1.jpg']);
imageLoader.onLoad=function(){
        //trace('loaded');
        _root.onMouseUp=function(){
                var mc=this.createEmptyMovieClip('tmp',this.getNextHighestDepth())
               
                mc._x=random(Stage.width);
                mc._y=random(Stage.height);
                imageLoader.displayImage(mc,random(imageLoader.length));
        }
       
}


vecalion 05.01.2006 15:33

Цитата:

Сообщение от silin
если для 8-ки и подгружаем только изображения, то можно такой подход...

Ага, нечто подобное я и искал! Спасибо. А для 7-ки остается только использовать что-то вроде того, что я описал в предыдущем посте под номером (1)?

nyctota 05.01.2006 16:38

to vecalion:

боюсь показаться слишком умным =), но 2-ой способ отлично работает... при некоторых условиях =)

Итак:

Грузишь картинки в невидимые (находящиеся за сценой или _visible = false) мувики.
Делаешь мувик, который будет отображать эти картинки (следишь за его координатами, если тебе надо, и т.д.).
Невидимые мувики после загрузки картинок просто-напросто удаляешь.

И всё. Грузишь по нажатию на кнопку нужную картинку в тот самый мувик, что создал для этого.

Фишка: CACHE ON!

Если ты не используешь при загрузке картинок приёмы, запрещающие их кэширование, то, я думаю, доли секунды, которые потребуются браузеру, чтоб достать из кэша твои картинки -- вполне приемлемая цена за то, чтоб обойтись без использования 8-го Флэша.

__i 05.01.2006 17:00

nyctota предложил хороший вариант, я тоже в большинстве проектов так делаю %))), хотя бывают делал и такой вариант( работает для большинства случаев, и немного геморно бывает с координатами):

создаютется нужное для картинок число мувиков которые лепяться к руту, ну или в какой нить мувик к которому потом могут "достучаться", мувики "контейнеры", и этим "контейнерам" , передаеться ссылка не на саму картинку, а на мув прикрепленный к руту, и контейнер делает с ним свои дела %))

Vasik1 19.04.2006 12:08

2 silin
Слушай... я новичок... у меня не получается это сделать, как в твоём коде... можешь дать fla файл посмотреть... нужная вещь, пытаюсь реализовать, а сделать не могу... подсказать некому...

timasik 19.04.2006 13:13

silin, подскажи плиз если не трудно как это всё использовать. Я пока ещё в темноте, а так хочется к свету. Если конкретно то как это всё размещать. Было бы супер если бы исходник. Для развития это супер. Заранее спасибо.

silin 19.04.2006 13:56

Вложений: 1
я же показал..,
или вы думаете что во фла что-то иначе..


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

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