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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.07.2008, 20:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 21  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Рад что всё получилось. Однако жаль выбросить потраченный час, поэтому я всеже представлю свой вариант.
Код:
Stage.scaleMode = "noScale";
Stage.align = "TL";
import flash.display.BitmapData;
////
var cols:Number = 6;
var pics:Number = 30;
var vspace:Number = 10;
var hspace:Number = 10;
var img_height:Number = 70;
var img_width:Number = 70;
////
var bitmap:BitmapData = new BitmapData(img_width, img_height, false, 0);
var gallery:MovieClip = _root.createEmptyMovieClip("gallery", 10);
var float_pic:MovieClip = _root.createEmptyMovieClip("float_pic", 20);
var float_bmp:BitmapData = bitmap.clone();
float_pic.attachBitmap(float_bmp, 0, "auto", true);
float_pic._alpha = 50;
gallery._y = 200;
////
var current:MovieClip;
var listener:Object = new Object();
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(listener);
////
listener.onLoadInit = function(mc){
    var bmp:BitmapData = bitmap.clone();
    var container:MovieClip = mc._parent;
    container.attachBitmap(bmp, 10, "auto", true);
    bmp.draw(mc);
    mc.removeMovieClip();
    var id:Number = container.id;
    var horder:Number = (id+cols)%cols;
    horder = horder==0 ? cols-1 : horder-1
    var vorder:Number = Math.ceil(id/cols)-1;
    container._x = horder*img_width + hspace*horder;
    container._y = vorder*img_height + vspace*vorder;
    container.onRelease = function  () {
        float_bmp.draw(container);
        current._alpha = 100;
        container._alpha = 20;
        current = container;
        trace("Загружаем большую картинку с адреса "+container.big_url);
    }

    if (container.id < pics) {
        loadPic(container.id+1);
    } else {
        loader.removeListener(listener);
        delete listener;
        delete loader;
        delete bitmap;
    }
    trace("изображение "+container.id+"\nряд "+(vorder+1)+"\nстолбец "+(horder+1)+"\n")
}
////
function loadPic (counter:Number) {
    var img_url:String = "images/"+counter+".jpg";
    var big_url:String = "images/big/"+counter+".jpg";
    var container:MovieClip = gallery.createEmptyMovieClip("p"+counter, counter);
    var mc:MovieClip = container.createEmptyMovieClip("_mc",0);
    container.id = counter;
    container.big_url = big_url;
    loader.loadClip(img_url, mc);
}
////
loadPic(1);
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 03.08.2008 в 14:32.
Старый 03.08.2008, 11:36
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 22  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Джонатан! Прошу меня извинить за задержку в предоставлении обещанного мной приложения (не смог выйдти на связь по личным причинам). Если тема еще актуальна, хочу аддитивно к вариантам коллег представить свой вариант реализации Вашего проекта.



Код:
//////////////////////////////////////////////////////////////////////////////////////////////////
//   Приложение, формирующее галлерею с превью-картинками и полномасшатабный просмотр			
//	 загруженных фотографий.																	
//																								
//   Основные преимущества:																		 			
//   1. Независимые друг от друга загрузки изображений (параллельная загрузка), в связи с чем,	
//      загрузка осуществляется быстро;															
//   2. При параллельной загрузке изображений вывод их превью-аналогов в превью-область			
//      производится последовательно слева-направо и сверху вниз, а не хаотично,				 
//		в зависимости от размера изображения;													
//	 3. Вы имеете возможность работать с уже загруженными изображениями пока другие грузятся;	
//   4. Размер превью-изображений и полномасштабных изображений не зависит от геометрических	 
//      размеров загружаемых изображений, т.е. изображения любых размеров "втиснутся" в области	
//      просмотра;																				
//   5. Легкость настройки и управления;														
//   6. Относительная простота и структурированность кода. Это улучшает его читабельность и		
//      облегчает работу с кодом по его оптимизации и рефакторингу. 							
//																								
//																								
//									Created by Alex_beginner.									 
//						 		 All rights not reserved, 2008.									
//																								
//////////////////////////////////////////////////////////////////////////////////////////////////

import flash.display.BitmapData;
import flash.geom.Matrix;

//************************************************************************************************
//	НАСТРОЙКИ
//************************************************************************************************
var N:Number = 30;//количество загружаемых изображений
var imgCounter:Number = 1;//счетчик загруженных изображений
var photoWidth:Number = 250;//ширина полномасштабной области просмотра
var photoHeight:Number = 240;//высота полномасштабной области просмотра
var photoX:Number = 350;//координата X левого-верхнего угла полномасштабной области просмотра
var photoY:Number = 200;//координата Y левого-верхнего угла полномасштабной области просмотра
var prevWidth:Number = 40;//ширина превью-области
var prevHeight:Number = 40;//высота превью-области
var prevVCount:Number = 5;//количество изображений в превью-области по вертикали
var prevHCount:Number = 6;//количество изображений в превью-области по горизонтали
var LV:Number = 10;//расстояние между превью-изображеними по вертикали
var LH:Number = 10;//расстояние между превью-изображеними по горизонтали
var prevX:Number = 10;//координата X левого-верхнего угла прьевью-области
var prevY:Number = 200;//координата Y левого-верхнего угла превью-области
//************************************************************************************************

//************************************************************************************************
//	ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
//************************************************************************************************
var lastClipName = null;//имя клипа по которому последний раз был произведен клик мышью
var lastMCIndex = 0;//последний, проверенный на загруженность, клип
//************************************************************************************************

this.createEmptyMovieClip("photoMC", this.getNextHighestDepth());//создаем полномасштабную область просомтра
var mcl:MovieClipLoader = new MovieClipLoader();//создаем загрузчик
var mclL:Object = new Object();//создаем слушатель событий загрузчика
mcl.addListener(mclL);//назначаем слушателем событий загрузчика объект mclL

//процедура, определяющая основные характеристики текущего загруженного клипа, включая
//его местоположение в превью-области его габариты, сохранение характеристик загруженного 
//изображения в свойствах клипа, последовательную визуализацию загруженных клипов, 
//уничтожение выделенных ресурсов.
mclL.onLoadInit = function(target:MovieClip):Void
{
	target.realWidth = target._width;
	target.realHeight = target._height;
	target.flagLoaded = true;
	target._width = prevWidth;
	target._height = prevHeight;
	indexMC = Number(target._name);
	target._x = (indexMC-Math.floor(indexMC/prevHCount)*prevHCount)*(prevWidth+LV)+prevX;
	target._y = Math.floor(indexMC/prevHCount)*(prevHeight+LH)+prevY;
	target._visible = false;
	orderedVisualization(target);
	target.onPress = renderBMP;
	if (imgCounter==N)
	{
		mcl.removeListener(mclL);
		delete mclL;
		delete mcl;
	}
	imgCounter++;
}

//процедура, выполняющая рендеринг загруженного клипа в полномасштабную область посмотра,
//клипа на котором был произведен клик мышью
function renderBMP():Void
{
		var photoBMP:BitmapData = new BitmapData(this.realWidth, this.realHeight, false, 0x000000);
		photoMC.attachBitmap(photoBMP,10,"auto",true);
		photoMC._x = photoX;
		photoMC._y = photoY;
		photoMC._width = photoWidth;
		photoMC._height = photoHeight;
		photoBMP.draw(this,new Matrix(),null,"normal",null,true);
		if (lastClipName!=null)
		{
			lastClipName._alpha = 100;
		}
		this._alpha = 50;
		lastClipName = this;
}

//процедура последовательной визуализации загруженных клипов
function orderedVisualization(target):Void
{
	for (var i:Number=lastMCIndex; i<=N-1; i++)
	{
		if (target._parent[i].flagLoaded)
		{
			if (!target._parent[i]._visible)
			{
				target._parent[i]._visible = true;
			}
		}else
		{
			lastIndex = i;
			break;
		}
	}
}


//главная процедура создания превью-клипов и инициализации загрузки в них изображений
function loadImg():Void
{
	for (var i:Number = 0; i<=N-1; i++)
	{
		this.createEmptyMovieClip(i, this.getNextHighestDepth());
		this[i].flagLoaded = false;
		mcl.loadClip("photos/"+(i+1)+".jpg",this[i]);
	}
}

loadImg();//вызов главной процедуры


Его преимущества:

1. Независимые друг от друга загрузки изображений (параллельная загрузка), в связи с чем, загрузка осуществляется быстро;
2. Несмотря на параллельную загрузку изображений вывод их превью-аналогов в превью-область производится последовательно слева-направо и сверху вниз, а не хаотично, в зависимости от размера изображения;
3. Вы имеете возможность работать с уже загруженными изображениями пока другие грузятся;
4. Размер превью-изображений и полномасштабных изображений не зависит от геометрических размеров загружаемых изображений, т.е. изображения любых размеров "втиснутся" в области просмотра;
5. Легкость настройки и управления;
6. Относительная простота и структурированность кода. Это улучшает его читабельность и облегчает работу с кодом по его оптимизации и рефакторингу.

Недостатки:

1. Код носит базовый, не законченный характер, т.е. отсутствует код обуславливающий дизайнерские аспекты, такие как твиннинг, обрамление превью-изображений при клике на них, итд.
2. Визуализация превью-изображений хоть и происходит последовательно, но рывками в зависимости от размеров изображений.

Обязательно тестите приложение в режиме моделирования загрузки - увидите в чем разница между этим приложением и обычным загрузчиком.

Надеюсь код поможет. Удачи!
Вложения
Тип файла: rar JGallery.rar (161.7 Кб, 72 просмотров)
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 03.08.2008 в 11:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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