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

Dr_Bra 18.08.2010 18:35

собственный класс, обращение к объектам главного класса
 
Делаю аквариум с рыбками. Нарисовал вокруг аквариума область, назвал ее hitTest_mc.
Нарисовал рыбку, поменял ее класс в библиотеке на собственный, который должен заставлять рыбку плавать. И если рыбка наплывет на hitTest_mc, она должна развернуться.

hitTest_mc – инстенснэйм экземпляра, который находится на таймлайне.
Как к нему обратиться из моего дополнительного класса рыбки?
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class FishMove extends MovieClip
        {
 
                public function FishMove(hitTest_mc:Sprite):void
                {
                        trace("FishMove class loaded");
 
                        this.addEventListener(Event.ENTER_FRAME, moveMyFish);
                }
 
                private function moveMyFish(evt:Event):void
                {
                        this.x += 1;
                        if (this.hitTestObject(hitTest_mc))
                                {
                                        this.x -= 1;
                                }
 
                }
        }
}

Добавлено через 2 минуты
может что–то надо написать на главном таймлайне?

Bgg 18.08.2010 18:50

А где код главного класса?

Dr_Bra 18.08.2010 18:52

Цитата:

Сообщение от Bgg (Сообщение 929747)
А где код главного класса?

не думал что понадобится,) вот он
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import flash.display.StageScaleMode;
        import flash.display.StageAlign;
 
        public class PoulScript extends MovieClip
        {
                private var _stage;
                private var _w:Number;
                private var _h:Number;
 
                public function PoulScript():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP_LEFT;       
                        stage.showDefaultContextMenu=false;
 
                        addStageVar();
                }
 
                private function addStageVar():void
                {                       
                        _stage = stage;
                        _w = _stage.stageWidth;
                        _h = _stage.stageHeight;
 
                        scene_1_mc.x = _w/2;
                        scene_1_mc.y = _h/2;
 
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressMove);
                        loaderInfo.addEventListener(Event.COMPLETE, completeProgress);
 
                        _stage.addEventListener(Event.RESIZE, scene_1Resize);
 
                        scene_1();
                }
 
//------------------------------------------ПРЕЛОАДЕР------------------------------------------//       
                private function progressMove(event:ProgressEvent):void
                {
                        var loaded:uint = event.bytesLoaded;//сколько загрузилось
                        var total:uint = event.bytesTotal;//сколько весит всего
                        var procent:uint = int(loaded / total * 100);//процент загрузки
                        scene_1_mc.progress_tf.text = int(loaded / total * 100) + '%';
                }
 
                private function completeProgress(event:Event):void
                {
                        _stage.removeEventListener(Event.RESIZE, scene_1Resize);
                        _stage.addEventListener(Event.RESIZE, scene_2Resize);
                        gotoAndStop(2);
                        scene_2();
                }
 
//------------------------------------------РЕСАЙЗИМ СЦЕНЫ------------------------------------------//       
                private function scene_1Resize(evt:Event):void
                {
                        _w = _stage.stageWidth;
                        _h = _stage.stageHeight;
 
                        bg_mc.width = _w;
                        bg_mc.height = _h;
                        bg_mc.x = _w/2;
                        bg_mc.y = _h/2;
 
                        scene_1_mc.x = _w/2;
                        scene_1_mc.y = _h/2;
                }
 
                private function scene_2Resize(evt:Event):void
                {
                        _w = _stage.stageWidth;
                        _h = _stage.stageHeight;
 
                        bg2_mc.width = _w;
                        bg2_mc.height = _h;
                        bg2_mc.x = _w/2;
                        bg2_mc.y = _h/2;
 
                        scene_2_mc.x = _w/2;
                        scene_2_mc.y = _h/2;
                }
 
//------------------------------------------СЦЕНЫ------------------------------------------//       
 
                //----------------------------1 «ПРЕЛОАДЕР»--------
                private function scene_1():void
                {
                        trace("сцена 1");
 
                        bg_mc.width = _w;
                        bg_mc.height = _h;
                        bg_mc.x = _w/2;
                        bg_mc.y = _h/2;
                }
 
                //----------------------------2 сцена--------
                private function scene_2():void
                {
                        trace("сцена 2");
 
                        bg2_mc.width = _w;
                        bg2_mc.height = _h;
                        bg2_mc.x = _w/2;
                        bg2_mc.y = _h/2;
                }
        }
}

Добавлено через 1 минуту
и у нас в сцене 2 появляется аквариум с hitTest_mc и рыбками

Bgg 18.08.2010 19:25

А рыбки то где у вас рождаются? Во втором кадре что ли? Создавайте их в scene_2().

Код AS3:

private function scene_2():void
{
        var fish:FishMove = new FishMove(getChildByName("hitTest_mc"));
        addChild(fish);
 
        trace("сцена 2");
        bg2_mc.width = _w;
        bg2_mc.height = _h;
        bg2_mc.x = _w/2;
        bg2_mc.y = _h/2;
}

Если я конечно вас правильно понял, гыгы. И вообще перепишете все, у вас тут нет острой необходимости в кадрах.

in4core 18.08.2010 19:26

Код AS3:

getChildByName('hitTest_mc').x = 100;


Dr_Bra 18.08.2010 19:28

то есть нужно их добавлять в коде, так-то они у меня сразу клались на сцену.

Contemplator 18.08.2010 19:30

Dr_Bra, по части класса FishMove косяк в логике метода moveMyFish
конкретно вот:
Код AS3:

this.x += 1;
if (this.hitTestObject(hitTest_mc))
{
        this.x -= 1;
}

при столкновении рыба отплывёт на 1рх, после чего продолжит движение по исходному вектору, выглядеть будет так как будто долбится об стенку аквариума =)
введи переменную, отвечающую за смещение, step скажем и обнови метод:
Код AS3:

if (this.hitTestObject(hitTest_mc))
{
        step *= -1;
        // + разворот рыбки
}
this.x += step;

P.S. на верность и правильность моих высказываний не претендую - до AS3 только-только добрался - изучаю пока что... но логика на то и логика - она справедлива для всего =))

Dr_Bra 18.08.2010 19:34

говорит incorrect number of argument..
в главной класс нужно импортировать ?
Код AS3:

import FishMove;

Добавлено через 11 минут
Код AS3:

 
                        var fish1:FishMove = new FishMove(getChildByName("hitTest_mc"));// ругаетсо
                        scene_2_mc.aquarium_mc.addChild(fish1);

Код AS3:

 
                        var fish1:FishMove = new FishMove();//не ругаетсо
                        scene_2_mc.aquarium_mc.addChild(fish1);


dimarik 18.08.2010 23:52

Нет "главного" класса. Есть тупо набор паттернов. Рекомендую начать с них.

Dr_Bra 19.08.2010 11:03

Наверное не стоит париться и делать собственный класс для рыбок, а писать все в одном классе PoulScript, который в моем случае, я считаю, "главный". На самом деле не хотелось плодить код, но решения не нашлось!


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

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