Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вызов функции из класса в мувике (http://www.flasher.ru/forum/showthread.php?t=120781)

langolf 30.01.2009 14:44

Вызов функции из класса в мувике
 
Я немного новичек в програмировании на AS3, поэтому вопрос может показаться глупым. Сразу скажу: честно пытался найти решение в гугле и книжках. Наверное видел фигу :)

Есть отдельно написанный класс, атачится к флэшке (main class). Внутри класса есть ф-ция (public draw(), ф-ция просто рандомно кидает на сцену 10 кружков). В самой флэшке есть мувик (export for AS, export for 1st frame, no instance name, instance of canvas() ), в нем еще один, к примеру top_mc (export for AS, export for 1st frame, instance of top() ). Мувики в классе объявляны.

Что хочу: Кидаю на сцену мувик (instance of canvas()), во вложенном в него мувике (top_mc) хочу чтобы сработала ф-ция draw(). Чтобы можно было раскопировать canvas (до тыщщи копий) и кружочки в каждом будут рисоваться, тогда наступит счастье во всем мире :)

Понимаю что для top_mc ф-ция draw() это неопределнная ф-ция и он не понимает чо от него хотят. Но как его научить этой ф-ции? Как объяснить ему что она лежит хорошая такая пабликом в основном классе проекта? Догадываюсь что нужно сослаться на класс и на саму ф-цию, не подскажете как? Буду очень благодарен.

mre 30.01.2009 14:49

Можно использовать статический метод, либо испускать событие.

langolf 30.01.2009 14:58

"статический метод" - это как? (я мал и глуп, я не видал ..., вообщем я дизайнер, прости Господи) :))
я читал про prototype это не они?

mre 30.01.2009 15:06

Нет.
Статический метод - это метод, который описывается для класса, а не для его экземпляров.
Код AS3:

package
{
        public class Test
        {
                public static function draw(to:DisplayObjectContainer):void
                {
                    ....
                }
        }
}

Использование:
Код AS3:

Test.draw(container);


langolf 30.01.2009 15:35

И все равно ошибка. Он мне сразу пишет что все необъявлено и тд и тп. Вот мой код.

Код AS3:

package {
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.ui.Keyboard;
        import flash.events.MouseEvent;
        import flash.display.Sprite;
        import flash.display.MovieClip;
        import flash.display.DisplayObjectContainer;
        import flash.display.Stage;
        import area;
        import clip;
        import mCcub;
        import mCcir;
        import mCtri;
 
 
        public class TrainF extends MovieClip
        {
                //Var
                var area_mc:MovieClip = new area();
                var clip_mc:MovieClip = new clip();
                var top_mc:MovieClip = new top();
                var cub_mc:MovieClip=new mCcub  ;
                var cir_mc:MovieClip=new mCcir  ;
                var tri_mc:MovieClip=new mCtri  ;
 
                var newClips:Array=[];
 
                var myWidth:Number=clip_mc.area_mc.width;
                var myHeight:Number=clip_mc.area_mc.height;
                var numClips:Number=30;
 
                public function TrainF()
                {
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, space);
                        this.draw(top_mc);
 
                }
 
                public function space(event:KeyboardEvent):void
                {
                        if (event.keyCode==Keyboard.SPACE) {
                                this.draw(top_mc);
                                //trace(clip_mc.area_mc.x);
                        }
                }
 
                public static function draw(to:DisplayObjectContainer):void
                {
                        // Prepare the stage (empty it)
                        //this.clearStage();
 
                        for (var i = 0; i<numClips; i++)
                        {
                                var tri_mc:MovieClip=new mCtri  ;
                                var cub_mc:MovieClip=new mCcub  ;
                                var cir_mc:MovieClip=new mCcir  ;
 
                                var clips:Array=new Array(tri_mc,cub_mc,cir_mc);
                                var curClip=clips[Math.floor(Math.random()*clips.length)];
 
                                canvas_mc.addChild(curClip);
                                newClips.push(curClip);
 
                                curClip.x=Math.random()*myWidth;
                                curClip.y=Math.random()*myHeight;
                        }
                }
 
                public function clearStage():void
                {
                        for (var i:Number = 0; i < newClips.length; i++)
                        {
                                newClips[i].parent.removeChild(newClips[i]);
                        }
                        newClips=[];
                }
        }
}

Что я делаю не так? Подскажи пожалуйтса.

mre 30.01.2009 15:54

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

langolf 30.01.2009 15:55

Хорошо. Понял вашу мысль. Спасибо и на этом :)

Alex Lexcuk 30.01.2009 17:26

>> кружочки в каждом будут рисоваться,

Написание документ класса и класса для мувиков
http://www.dnadillo.dn.ua/fla/doc-mc-info.swf



Пример класса для документа и вложенных мувиков мувики удаляют себя при нажатии на них
http://www.dnadillo.dn.ua/fla/doc-rect-class.swf
http://www.dnadillo.dn.ua/fla/doc-rect-class.zip

langolf 30.01.2009 17:33

Цитата:

Сообщение от mre (Сообщение 794502)
Вы так и не поняли что такое статический метод.
Судя по жуткому коду, далее помогать не вижу смысла.
Либо учите основы языка, либо продолжайте просто рисовать.

Извините, но не могу успокоиться. Я вроде понял свою ошибку. В итоге создал отдельно класс Test, туда прописал статик ф-цию draw(). Пытаюсь обратиться к ней из мувиклипа он пишет

Цитата:

1180: Call to a possibly undefined method addChild
Как так? Я вроде импорт Мувиклип класса прописал. Почему он не может понять вдруг что такое addChild?

mre 30.01.2009 17:41

Покажите класс с методом и кусок, где Вы обращаетесь к нему.
Только без лишнего кода.


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

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