Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   про классы - почему это не работает? (http://www.flasher.ru/forum/showthread.php?t=100693)

geron3 02.09.2007 21:42

про классы - почему это не работает?
 
Есть такой класс, который прилинкован к МувеКлипу

Код:

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:58

Кавычки забыли.
Код:

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);
    }
}

Возможный вариант ( работоспособность не проверял, переделал пример выше).


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

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