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

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

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

Регистрация: Sep 2007
Сообщений: 36
По умолчанию про классы - почему это не работает?

Есть такой класс, который прилинкован к МувеКлипу

Код:
import mx.utils.Delegate;

class class_card_tovar extends MovieClip{

	private var __listenerObject:Object;
	private var __mcl:MovieClipLoader;
	
	function onPress() {
		ImageLoader("1.jpg");
	}
	
	public function ImageLoader(image:String) {
		
		__mcl = new MovieClipLoader();
		__listenerObject = new Object();
		
		__listenerObject.onLoadComplete = Delegate.create (this, this.ImageLoader_onLoadComplete)
		__listenerObject.onLoadProgress = Delegate.create (this, this.ImageLoader_onLoadProgress)
		
		__mcl.addListener(__listenerObject);
		
		__mcl.loadClip(image, this.createEmptyMovieClip("pic_mc"+id, this.getNextHighestDepth()));
	}
	
	private function ImageLoader_onLoadComplete ():Void {
		trace ('com');
		preloader._visible = false;
	}	
	
	private function ImageLoader_onLoadProgress (loadedBytes:Number, totalBytes:Number):Void {
		trace ('com2' + totalBytes);
	}
при создании мувеклипа в одном экземпляре - все проходит ОК, при создании 2 и более изображение загружается только в первый созданный.


Создаю так

Код:
for (var i = 0; i < 2; i++)
{
	attachMovie("form_card_tovar", tovar + i, this.getNextHighestDepth(), {id:i, _x:i*200 + 10, _y:i*200 + 10});
}
Проблема в том что из на экране должно быть много и каждый должен загрузить в СЕБЯ картинку, а при этом коде грузятся только в первый созданный клип


Последний раз редактировалось iNils; 02.09.2007 в 22:47.
Старый 02.09.2007, 22:58
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Кавычки забыли.
Код:
for (var i = 0; i < 3; i++) {
	attachMovie ("form_card_tovar", "tovar" + i, this.getNextHighestDepth (), {id:i, _x:i * 200 + 10});
}
Несколько общих рекомендаций:
1. Имя класса пишут с большой буквы, функции - с маленькой. А у вас все наоборот.
2. Писать в имени класса слово class, это масло масленное.
3. Создавать для MovieClipLoader отдельный __listenerObject совсем необязательно, подписать можно и сам клип __mcl.addListener(this), тогда и Delegate не нужен с __listenerObject.onLoadComplete не нужен.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 03.09.2007, 01:42
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 3  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Код:
import mx.utils.Delegate;

class class_card_tovar extends MovieClip{

	private var __listenerObject:Object;
	private var __mcl:MovieClipLoader;
	private var __picsNum:Number = 2; //Колличество картинок
	private var __curPic:Number = 1;
	private var flag:Boolean = false;
	
	function onPress() {
		ImageLoader("1.jpg");
	}
	
	public function ImageLoader(image:String) {
		
		__mcl = new MovieClipLoader();
		__listenerObject = new Object();
		
		if (!flag){
			__listenerObject.onLoadComplete = Delegate.create (this, this.ImageLoader_onLoadComplete);
			__listenerObject.onLoadProgress = Delegate.create (this, this.ImageLoader_onLoadProgress);
			__mcl.addListener(__listenerObject);
			flag = true;
		}
		
		__mcl.loadClip(image, this.createEmptyMovieClip("pic" + __curPic+ "_mc", this.getNextHighestDepth()));
	}
	
	private function ImageLoader_onLoadComplete ():Void {
		trace ('com');
		preloader._visible = false;
		if (__curPic != picNum){
			__curPic ++;
			ImageLoader (__curPic.toString + ".jpg");
		}
	}	
	
	private function ImageLoader_onLoadProgress (loadedBytes:Number, totalBytes:Number):Void {
		trace ('com2' + totalBytes);
	}
}
Но так правильнее —
Главный класс управляет месторасположением картинок:
Код:
/**
 * @author Screamge
 * @date Sep 3, 2007
 */
import mx.utils.Delegate;
import datas.Loader;
 
class datas.Main extends MovieClip {
	private static var maxLength:Number = 5;
	private var i:Number;
	
	private function Main() {
		//private constructor
	};
	
	function onPress (Void):Void {
		for (i = 0; i <= Main.maxLength; i++){
			attachMovie("form_card_tovar", "tovar" + String (i) + "_mc", this.getNextHighestDepth(), {_x:i*100 + 10, _y:i*100 + 10});
			var loader:Loader = new Loader (this['tovar' + String (i) + '_mc'], i);
		}
	}	
}
Класс подгружающий картинки:
Код:
import mx.utils.Delegate;

class datas.Loader extends MovieClip{
	private var __this:MovieClip;
	private var __listenerObject:Object;
	private var __mcl:MovieClipLoader;
	
	public function Loader (_this:MovieClip, num:Number){
		trace ('loader' + num);
		__this = _this;
		__mcl = new MovieClipLoader();
		
		__listenerObject = new Object();
		__listenerObject.onLoadComplete = Delegate.create (this, this.ImageLoader_onLoadComplete);
		__listenerObject.onLoadProgress = Delegate.create (this, this.ImageLoader_onLoadProgress);
		
		__mcl.addListener(__listenerObject);
		
		ImageLoader(String (num) + '.jpg');
	}
	
	private function ImageLoader(image:String):Void {		
		__mcl.loadClip(image, __this, 1);
	}
	
	private function ImageLoader_onLoadComplete ():Void {
		trace ('com');
		//preloader._visible = false;
	}	
	
	private function ImageLoader_onLoadProgress (loadedBytes:Number, totalBytes:Number):Void {
		trace ('com2' + totalBytes);
	}
}
Есть ещё вариант аттачить мувик к которому уже прикреплён класс загрузчик и в который передаётся ID желаемой картинки, при желании я думаю переделать не составит труда.
__________________
Free-lance | Twitter | Me

Старый 03.09.2007, 02:14
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 4  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Код:
class datas.Loader extends MovieClip {
    private var __this:MovieClip;
    private var __mcl:MovieClipLoader;
    public function Loader(_this:MovieClip, num:Number) {
        trace('loader'+num);
        __this = _this;
        __mcl = new MovieClipLoader();
        __mcl.addListener(this);
        ImageLoader(String(num)+'.jpg');
    }
    private function ImageLoader(image:String):Void {
        __mcl.loadClip(image, __this, 1);
    }
    private function onLoadComplete():Void {
        trace('com');
        //preloader._visible = false;
    }
    private function onLoadProgress(loadedBytes:Number, totalBytes:Number):Void {
        trace('com2'+totalBytes);
    }
}
Возможный вариант ( работоспособность не проверял, переделал пример выше).

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

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

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


 


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


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