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

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

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

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
По умолчанию loadClip внутри class - а

Всем привет!

Решил вынести загрузчик из кадра в класс, для удобного применения в будущем. И столкнулся с проблемами, которые мне на прямую не удалось решить.
Например не удается размещать функции такого типа внутри класса oLoadListener.onLoadInit = function(mcTarget:MovieClip)
Пришлось все подобные функции вложить внутрь другой функции.
Но в таком случае не получается вернуть загружаемый файл из вызывающей функции.

то есть clip = loaders("имя файла",container); не сработает как надо.
Решил обойти возврат прямой функцией. Которая вызывает функцию _root.finish(clip) после загрузки внутри oLoadListener.onLoadInit , но это как то не правильно каждый раз к загрузке дописывать функцию вывода. Подскажите как проще сделать такой загрузчик, без костылей, что бы после загрузки возвращал загруженую картинку вызвавшей ее функции ?

Вот сам код, но он больше эксперементальный чем конечный вариант.
Код AS1/AS2:
 
import flash.display.BitmapData;
import mx.utils.Delegate;
class loader_img3{
//===========================================================================================================
//- Name: Загрузчик файлов;
// 
// Для работы класса необходимо в первую очередь запустить функцию init(); из рабочей среды
// img(path,container,width,height)
// path - имя файла
// container -  место, куда будет грузиться файл
// width и height - не обязательны
//===========================================================================================================
public var name_file:String;
public var empty_mc:MovieClip;
public var mcLoader:MovieClipLoader; 
public var oLoadListener:Object; 
public var ob:Object;
public var mcload:String;
public var container:MovieClip;
public function init(){
 
ob = new Object();
ob.ind = 0;
ob.ind2 = 0;
ob.depth = 0;
}
 
public function img(name_file,container,WIDTH,HEIGHT){
 
if(WIDTH == undefined){WIDTH = 0;}
if(HEIGHT == undefined){HEIGHT = 0;}
ob[ob.ind] = {name:name_file,container:container,width:WIDTH,height:HEIGHT,index:ob.ind,ins:ob.ind}
 
var obj = ob[ob.ind];
empty_mc = container.createEmptyMovieClip("mcImage_"+ob.ind, 8000+ob.ind);
ob.ind++;
obj.img = empty_mc;
trace("empty_mc= "+empty_mc)
// создаем экземпляр MovieClipLoader
mcLoader = new MovieClipLoader();
// слушатель загрузки картинок
oLoadListener = new Object();
// вешаем слушатель к MovieClipLoader
mcLoader.addListener(oLoadListener);
 
 
//var clip = 
loaders2(name_file,empty_mc,ob);
//return obj.img;
//trace("obj.copyBM= "+obj.copyBM)
//trace("cclip= "+clip)
	}	
//-------------------------------------------------
public function loaders2(name_file,container,ob){
mcLoader.loadClip(name_file,container);
oLoadListener.onLoadProgress = function(mcTarget:MovieClip, nBytesLoaded:Number, nBytesTotal:Number):Void
{
	trace(Math.round(nBytesLoaded / nBytesTotal * 100) + " % " + mcTarget + " загружено");
};
 
// эта выполнится после полной загрузки картинки
oLoadListener.onLoadInit = function(mcTarget:MovieClip)
{
var txt:String = ""+mcTarget;
if(txt.length != 0){
for(var i = 0; i <= txt.length;i++){
var txtt = txt.substring(i,i+1)
if(txtt == "_"){
var number = txt.substring(i+1,txt.length)
}
}
}
 
 
var obj:Object = ob[number];
 
 
mcTarget._x = 0
mcTarget._y = 0
 
if(obj.width != 0){
mcTarget._width = obj.width;
 
}
if(obj.height != 0){
mcTarget._height = obj.height;
}
ob.ind2++;
 
var clip = copyBitmap(obj,mcTarget, "bitmap0")
trace("cclip= "+clip)
//obj.copyBM = clip;
_root.finish(clip)
//return clip;
 
};
 
function copyBitmap(obj,target:MovieClip, mc:String):MovieClip
{
var container = obj.container;
 
var bmp:BitmapData = new BitmapData(target._width, target._height);
    bmp.draw(target);
var clip:MovieClip = container._parent.createEmptyMovieClip(mc, 1000);
    clip.attachBitmap(bmp, 0, "none", true);
 
   return clip;
}
};
};

Старый 16.07.2010, 17:15
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS1/AS2:
class com.streamLoader extends MovieClip {
 
	var _obj:Object;
	var _clipLoader:MovieClipLoader;
	var _loader;
	public function streamLoader() {
	}
 
	private function _loadContent(_content, _location, _func, _ld) {
 
		_loader = _ld;
		if (_content != "undefined.swf") {
			_obj = new Object();
			_clipLoader = new MovieClipLoader();
			_clipLoader.addListener(_obj);
			_obj.onLoadProgress = mx.utils.Delegate.create(this, _loadProgress);
			_obj.onLoadInit = _func;
			_obj.onLoadStart = _start;
			_clipLoader.loadClip(_content,_location);
		}
	}
	private function _loadProgress(target_mc:MovieClip, loaded:Number, total:Number):Void {
		var percent:Number = Math.floor(loaded/total*100);
		if (typeof _loader == "movieclip") {
			_loader.gotoAndStop(percent);
		} else {
			_loader.text = percent;
		}
		if (loaded/total == 1) {
			_loader.text = "";
 
		}
	}
	function _start(target_mc:MovieClip) {
		target_mc._visible = false;
	}

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

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
ух ты как все просто, спасибо in4core.

Старый 16.07.2010, 17:23
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
пользуйся ) писал давно уже

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

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
пригляделся поближе к коду, а почему _func вынесена за пределы класса? разве через делегат она не может быть использована или хотя бы внутри класса?

Старый 16.07.2010, 17:51
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
))) Для коллбека я делаю всегда

Код AS1/AS2:
var с = new com.streamLoader();
c._loadContent("URL",_root, callBack);
 
function callBack() { trace("LOADED ALL") }

Старый 16.07.2010, 20:58
NoCD вне форума Посмотреть профиль Отправить личное сообщение для NoCD Найти все сообщения от NoCD
  № 7  
Ответить с цитированием
NoCD
 
Аватар для NoCD

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
значит все таки от загрузчика не получишь сразу ответ! Как вариант прийдется такое же делать.

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

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

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


 


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


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