Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.07.2008, 15:12
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 1  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Question Загрузка изображений. Грузит только последнее.

Добрый день! Я делаю фотогалерею, которая потгружает в себя внешние изображения. Потгрузив, BitmapData перерисовывает их и Matrix уменьшает, тем самым создавая превью. Но вот почему-то, у меня загружается только последнее изображение!

Код:
import flash.display.BitmapData;
import flash.geom.Matrix;
import mx.transitions.Tween;

var mcl = new MovieClipLoader();
var mclLst = new Object();
var mtrx = new Matrix();
var bmd = new BitmapData(100, 75, true, 0x00000000);

mtrx.scale(0.15625, 0.15625);

mclLst.onLoadInit = function() {
	bmd.draw(photo_mc[imgContPath], mtrx);
	preview_mc[prevContPath].attachBitmap(bmd, this.getNextHighestDepth(), "auto", true);
	trace(prevContPath + " загружен");
}
// Слушатель MovieClipLoader'a
mcl.addListener(mclLst);
//Грузим картинку:
// all это переменная потгружаемая из внешнего TXT в котором задается колл-во изображений, которые надо потгрузить:

for (var q = 0; q < all; q++) {
	var imgPath = "img/img" + q + ".jpg";
	var imgContPath = "photo_cont" + q;
	var backImgContPath = "photo_cont" + (q-1);
	var prevContPath = "preview_cont" + q;
	var backPrevContPath = "preview_cont" + (q-1);
	//Создаю контейнеры для фотографий и превью:
	photo_mc.createEmptyMovieClip(imgContPath, this.getNextHighestDepth());
	preview_mc.createEmptyMovieClip(prevContPath, this.getNextHighestDepth());
	if( q <= 0) {
		photo_mc[imgContPath]._x = 0;
	} else {
		photo_mc[imgContPath]._x = preview_mc[backImgContPath]._x + 108;
	}
	mcl.loadClip(imgPath, photo_mc[imgContPath]);
}
Ткните пожалуйста где я ошибся. Спасибо за внимание.
__________________
Убейте меня!

Старый 30.07.2008, 15:34
Molecula вне форума Посмотреть профиль Отправить личное сообщение для Molecula Найти все сообщения от Molecula
  № 2  
Ответить с цитированием
Molecula
 
Аватар для Molecula

Регистрация: Apr 2007
Сообщений: 1,369
1) for()...loop - убрать.
2) Загнать название фоток в массив.
3) В теле функции Инита шагаем по массиву и грузим одну фотку, проверяя не в конце ли массива мы находимся - что бы опять не вызвать loadClip(...).

Т.е. в начале мы loadClip(...), что бы сработал Init.
Сжатый пример:
Код:
...
var counter:Number = 0;// наш счетчик, который показывает, сколько раз мы загрузили фоток из массива.
var arr:Array = [];
...
onLoadInit = function() {
this.counter++;
if(this.counter<this.arr.length){
loadClip(myMc, this.arr[this.counter]);
}
else trace('We finished');
}

loadClip(myMc, this.arr[this.counter]);
__________________
john


Последний раз редактировалось Molecula; 30.07.2008 в 16:44.
Старый 30.07.2008, 15:37
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
И чему по-Вашему равен [imgContPath], когда цикл уже отработал (это же доли секунды), а загрузка только началась? Последнему, конечно. Он и отрисовывается в битмапдату.
__________________
Reality.getBounds(this);

Старый 30.07.2008, 15:44
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 4  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Джонатан!

Начнем. Давайте рассмотрим вот эту строчку:

Код:
bmd.draw(photo_mc[imgContPath], mtrx);
Какие мысли она навивает?! Почему, Вы решили, что первым обязательно загрузится картинка, которую первой Вы поставили в loadClip. Первой, скорее всего, загрузится наименьшая по размеру картинка. Поэтому, предлагаю
издеваться над мувами, которые уже на самом деле подгружены, т.е.:

Код:
mclList.onLoadInit = function(target_mc:MovieClip) {}
И вот тогда, target_mc будет реально загруженный клипик. Ну, я так думаю. Мож в этом дело.
__________________
Случайность, господа, это знаете ли непознанная необходимость.

Старый 30.07.2008, 16:06
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 5  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Ну и запутали вы меня, товарищи! Итак:
Molecula, загнать названия фоток в массив я немогу, т.к. я делаю универсальную фотогалерею. Фотки будут часто меняться, и их колличество тоже будет всегда разным. Поэтому я и сделал что-бы пременная all грузилась из блокнота. В нем владелец будет задавать число равное колличеству фоток которые нужно будет загрузить.

Wolsh, да, действительно, это именно так.

Alex_beginner, неа. Не в этом.


А если я for заменю onEnterFrame и вставлю флаг, чтобы загрузка юыла строго последовательной, будет работать?
__________________
Убейте меня!


Последний раз редактировалось джонатан; 30.07.2008 в 16:26.
Старый 30.07.2008, 16:42
Molecula вне форума Посмотреть профиль Отправить личное сообщение для Molecula Найти все сообщения от Molecula
  № 6  
Ответить с цитированием
Molecula
 
Аватар для Molecula

Регистрация: Apr 2007
Сообщений: 1,369
Честно говоря как-то не разумно, что клиент будет сливать ТХТ файл, менять там цифру, потом заливать.
А исходя из этой срочки:
Код:
var imgPath = "img/img" + q + ".jpg";
Ещё и переименовывать их численно.

Лечге было показать, как в ХМЛь забивать названия файлов да и всё - ну это уже дело хозяйское.

onEnterFrame - вообще загубит дело.

Ну, раз у Вас есть общее кол-во фоток то:
Код:
...
var counter:Number = 0;// наш счетчик, который показывает, сколько раз мы загрузили фоток из массива.
var globalAmountOfPhotos:Number = 144; // например
...
onLoadInit = function() {
this.counter++;
if(this.counter < globalAmountOfPhotos){
loadClip(myMc, this.counter);
}
else trace('We finished');
}

loadClip(myMc, 'your_path'+this.counter+'extension');
__________________
john


Последний раз редактировалось Molecula; 30.07.2008 в 16:45.
Старый 30.07.2008, 17:07
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 7  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
А какая разница? Перезаливать TXT или XML

Так а bmd.draw будет перерисовывать загруженное изображение где?

И что такое 'extension' ???
__________________
Убейте меня!


Последний раз редактировалось джонатан; 30.07.2008 в 17:14.
Старый 30.07.2008, 17:33
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от джонатан Посмотреть сообщение
А какая разница? Перезаливать TXT или XML
Ну, захочет человек вставить между картинками 3 и 4 другую (всего их скажем 100) и придется ему переименовывать с 4-ой по 100-ю на единицу.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.07.2008, 17:55
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 9  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Цитата:
Alex_beginner, неа. Не в этом.
Да ну!!

Цитата:
Код:
bmd.draw(photo_mc[imgContPath], mtrx);
imgContPath у Вас определяется в циклике:

Цитата:
Код:
for (var q = 0; q < all; q++) {
	var imgPath = "img/img" + q + ".jpg";
	var imgContPath = "photo_cont" + q;
	var backImgContPath = "photo_cont" + (q-1);
	var prevContPath = "preview_cont" + q;
	var backPrevContPath = "preview_cont" + (q-1);
	//Создаю контейнеры для фотографий и превью:
	photo_mc.createEmptyMovieClip(imgContPath, this.getNextHighestDepth());
	preview_mc.createEmptyMovieClip(prevContPath, this.getNextHighestDepth());
	if( q <= 0) {
		photo_mc[imgContPath]._x = 0;
	} else {
		photo_mc[imgContPath]._x = preview_mc[backImgContPath]._x + 108;
	}
	mcl.loadClip(imgPath, photo_mc[imgContPath]);
}
Циклик проходит, и переменная imgContPath принмает последнее значение, а картиночки то еще грузятся. И вот это перестает работать:


Цитата:
Код:
mclLst.onLoadInit = function() {
	bmd.draw(photo_mc[imgContPath], mtrx);
	preview_mc[prevContPath].attachBitmap(bmd, this.getNextHighestDepth(), "auto", true);
	trace(prevContPath + " загружен");
}
Так вот решение, предложенное мною Выше, исключает асинхронность обращения к подгружаемому клипу (изображению) и Вы получаете контроль над подгруженным изображением в нужный момент, т.е когда такой контроль уместен.

Правда проблему с prevContPath это не снимает.

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

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

Попробовал исправить некторые ошибки до работоспособности кода, втиснув свои исправления в созданную Вами структуру (см.вложение). Получилось отвратительно.
Вложения
Тип файла: rar Корректировка кода Джонатана.rar (25.4 Кб, 86 просмотров)
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 30.07.2008 в 18:06.
Старый 30.07.2008, 18:04
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 10  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Alex_beginner, вы как-то раз нетак давно выкладывали исходник, на похожую тему. Назывался файл "Последовательная загрузка изображений (created_by_Alex_beginner)" Так вот я сейчас решил по нему сделать свою задачу. Все получилось, но с загрузкой каждой новой фотки, битмапа тоже перерисовывается в неё, как вы и описали выше. Сейчас гляну что Вы прикрепили на этот раз...
__________________
Убейте меня!

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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