Просмотр полной версии : про классы - почему это не работает?
Есть такой класс, который прилинкован к МувеКлипу
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});
}
Проблема в том что из на экране должно быть много и каждый должен загрузить в СЕБЯ картинку, а при этом коде грузятся только в первый созданный клип
Кавычки забыли.
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 не нужен.
screamge
03.09.2007, 01:42
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 желаемой картинки, при желании я думаю переделать не составит труда.
this.create
03.09.2007, 02:14
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);
}
} Возможный вариант ( работоспособность не проверял, переделал пример выше).
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.