Форум 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=96566)

Molecula 01.06.2007 22:54

не создает мувик через класс
 
Решил учиться писать на АS2.
Суть задачи: Грузятся данные из XML файла. Считываются атрибуты, и по их значениям во флешке гурзяся картинки.
С XML я разобрался, а вот с
Код:

createEmptyMovieClip
ну никак не могу разобраться, что я неправильно пишу. Информации особой не нашел по этому поводу, посему и спрашиваю. В чужих примерах вроде всё работает, а когда пытаюсь повторить шаги - ничего не выходит. Видать простых мелочей не вижу.
Ниже пример класса, который должен создать на сцене мувик и загрузить туда изображение:

Код:

class molecula.ImageLoader extends MovieClip {

 private var _mc:MovieClip;

 public function ImageLoader(image:String) {
 
 _mc.createEmptyMovieClip("_mc", this.getNextHighestDepth());

 var _mcl:MovieClipLoader = new MovieClipLoader();

 var listenerObject:Object = new Object();
 listenerObject.onLoadComplete = function(_mc) {
 trace("com")
 }
 
 _mcl.addListener(listenerObject);
 _mcl.loadClip(image, _mc);
 }
}

В кадре пишу так:

Код:

import molecula.ImageLoader;
new ImageLoader("images/1.jpg");

Где тут ошибка?

BigDan 01.06.2007 22:58

_mc у нас существует?

etc 01.06.2007 23:07

0. _mc не существует;
1. Мувиклипы в AS2 через конструктор и new не создаются.

BigDan 01.06.2007 23:10

наследование здесь - безсмысленное

Molecula 01.06.2007 23:11

Мммм..так я же создаю его такой срокой:
Код:

_mc.createEmptyMovieClip("_mc", this.getNextHighestDepth());
Или так нельзя в AS2?

2 __etc, BigDan, хорошо, буду разбираться.

BigDan 01.06.2007 23:14

ты не можешь создать новый клип в клипе, которого не существует(_mc)

screamge 01.06.2007 23:14

Код:

import mx.utils.Delegate;

class molecula.ImageLoader extends MovieClip {
        private var __listenerObject:Object;
        private var __mcl:MovieClipLoader;
       
        public function ImageLoader(image:String) {
                this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth());
               
                __mcl = new MovieClipLoader();
                __listenerObject = new Object();
               
                __listenerObject.onLoadComplete = Delegate.create (this, this.tracer)
               
                __mcl.addListener(listenerObject);
               
                __mcl.loadClip(image, this.pic_mc);
        }
       
        private function tracer ():Void {
                trace ('com')
        }
}

вызов:

Код:

import molecula.ImageLoader;

var loader:ImageLoader = new ImageLoader ('mypic.jpg');

Цитата:

Сообщение от BigDan
наследование здесь - безсмысленное

А как ты собираешься делать createMovieClip без него? просвяти пожалуйста

BigDan 01.06.2007 23:22

createEmptyMovieClip он делает в _mc,а не в this.

screamge 01.06.2007 23:25

я про "бесмысленное" наследование от MovieClip спрашиваю

BigDan 01.06.2007 23:28

Цитата:

А как ты собираешься делать createMovieClip без него? просвяти пожалуйста
ты это спрашивал. забываешь свои вопросы?

Molecula 01.06.2007 23:30

2 screamge, thx.
Я его чуть подчухал и исправил, а то Флеш матюкался.

Код:

import mx.utils.Delegate;

class molecula.ImageLoader extends MovieClip {

 private var listenerObject:Object;
        private var mcl:MovieClipLoader;
       
        public function ImageLoader(image:String) {
                this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth());
               
                mcl = new MovieClipLoader();
                listenerObject = new Object();
               
                listenerObject.onLoadComplete = Delegate.create (this, this.tracer)
               
                mcl.addListener(listenerObject);
               
                mcl.loadClip(image, this.mcl);
        }
       
        private function tracer ():Void {
                trace ('com')
        }
}

Но не работает. Картинка не грузиться.

2 BigDan, да я с this и без него пробовал - не получалось.

screamge 01.06.2007 23:34

Твоё изречение?
Цитата:

Сообщение от BigDan
наследование здесь - безсмысленное
Теперь мой вопрос:
Цитата:

А как ты собираешься делать createMovieClip без него? просвяти пожалуйста
на что получаю ответ не в тему:
Цитата:

createEmptyMovieClip он делает в _mc,а не в this
Ну так вот я и спрашиваю ещё раз, как ты собираешься создавать программно пустой мквиклип через класс не наследуя свойств MovieClip - a для него (класса)

Molecula, в вашем коде написанно следующее:
Цитата:

mcl.loadClip(image, this.mcl);
В переводе из контекста означает:

"Пожалуйста загрузи мне картинку имя которой переменная image в MovieClipLoader"

А нужно:
"Пожалуйста загрузи мне картинку имя которой переменная image в пустой мувиклип который я недано тут создал"

Вроде так:)

Molecula 01.06.2007 23:42

Понял. Дописал

Код:

private var pic_mc:MovieClip
что бы не выводил строку:
"There is no property with the name 'pic_mc'."

Но имг не грузит.

screamge 01.06.2007 23:47

Вообще правильнее будет создавать новый метод, а не грузить картинку через конструктор класса.

А что код из поста №7 не работает?

BigDan 01.06.2007 23:48

Цитата:

Сообщение от screamge
Ну так вот я и спрашиваю ещё раз, как ты собираешься создавать программно пустой мквиклип через класс не наследуя свойств MovieClip - a для него (класса)

Вот смотри.

Molecula 01.06.2007 23:53

2 screamge:
Цитата:

А что код из поста №7 не работает?
Нет, выдает две ошибки.
Так не ругается:
Код:

import mx.utils.Delegate;

class bkt.ImageLoader extends MovieClip {

    private var listenerObject:Object;
    private var pic_mc:MovieClip
        private var mcl:MovieClipLoader;
       
        public function ImageLoader(image:String) {
                this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth());
               
                mcl = new MovieClipLoader();
                listenerObject = new Object();
               
                listenerObject.onLoadComplete = Delegate.create (this, this.tracer)
               
                mcl.addListener(listenerObject);
               
                mcl.loadClip(image, this.pic_mc);
        }
       
        private function tracer ():Void {
                trace ('com')
        }
}


screamge 01.06.2007 23:55

BigDan, Передавать ссылку на объект и через неё создавать мувик конечно хорошо, жаль только что к поставленной задаче и приведённому ранее коду не имеет никакого отношения.

Код:

import mx.utils.Delegate;

class molecula.ImageLoader extends MovieClip {
        private var __listenerObject:Object;
        private var __mcl:MovieClipLoader;
        private var pic_mc:MovieClip;
       
        public function ImageLoader (image:String) {
                this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth());
               
                __mcl = new MovieClipLoader();
                __listenerObject = new Object();
               
                __listenerObject.onLoadComplete = Delegate.create (this, this.tracer)
               
                __mcl.addListener(__listenerObject);
               
                __mcl.loadClip(image, this.pic_mc);
        }
       
        private function tracer ():Void {
                trace ('com')
        }
}

Прошу меня извинить, исправлял тут и упустил кое что

Molecula 02.06.2007 00:06

http://www.denius.jino-net.ru/Desktop.rar - так я понимаю, как делается, а вот без
Код:

createEmptyMovieClip
в кадре и как по вышеуказанной ссылке?
Хочу разобраться, как сделать не используя те приёмы.


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

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