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

Dr_Bra 20.09.2010 11:39

обращение из дополнительного класса к объекту главного класса
 
Есть главный класс MainClass, в нем есть объект obj. Внутри этого объекта obj, есть еще один объект с собственным классом AdditionalClass. Нужно из класса AdditionalClass обратиться к объекту класса MainClass
Код AS3:

package
{
        import flash.display.*;
 
        public class MainClass extends Sprite
        {
                private var obj:Sprite;
 
                public function MainClass():void
                {                       
                        obj = obj_mc;
                }
        }
}

Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
 
        public class AdditionalClass extends Sprite
        {
                public function AdditionalClass():void
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        trace(obj)
                }
        }
}

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

Добавлено через 12 минут
пытаюсь передать переменную, выдает ошибку
Код AS3:

no default constructor found in base class AdditionalCldcc

Код AS3:

package
{
        import flash.display.*;
        import AdditionalClass;
 
        public class MainClass extends Sprite
        {
                private var obj:Sprite;
 
                public function MainClass(obj):void
                {                       
                        obj = obj_mc;
                }
 
        }
}

Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
 
        public class AdditionalClass extends Sprite
        {
                public function AdditionalClass(obj:Sprite):void
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        //trace(obj)
                        this.addEventListener(Event.ENTER_FRAME, moveStar);
                }
 
                private function moveStar(e:Event):void
                {
                        this.rotation += 1;
                }
        }
}

Добавлено через 23 минуты
вообще можно ли в классе AdditionalClass, создать метод, который бы останавливал вращение при наведении на obj ?

КорДум 20.09.2010 12:27

Вам нужен static, если я правильно понял. Обращаться MainClass.переменная

leofit 20.09.2010 12:44

Либо
Код AS3:

dispatchEvent(new Event('myEvent'))

А в главном классе объявляете листенер
Код AS3:

addEventListener("myEvent",myFunc, true);


Dr_Bra 20.09.2010 13:06

пробуем со статик:
Код AS3:

package
{
        import flash.display.*;
        import AdditionalClass;
 
        public class MainClass extends MovieClip
        {
                public static var OBJ:MovieClip;
                private var star:AdditionalClass;
 
                public function MainClass():void
                {                       
                        OBJ = obj_mc;
                        star = obj_mc.star_mc;
                }
        }
}

Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class AdditionalClass extends MovieClip
        {
                public function AdditionalClass():void
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        MainClass.OBJ.addEventListener(MouseEvent.CLICK, stopStar);
                        this.addEventListener(Event.ENTER_FRAME, moveStar);
                }
 
                private function moveStar(e:Event):void
                {
                        this.rotation += 1;
                }
 
                private function stopStar(e:MouseEvent):void
                {
                        this.removeEventListener(Event.ENTER_FRAME, moveStar);
                }
        }
}

выдает вот такую штуку :
Код AS3:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
        at AdditionalClass/init()
        at flash.display::Sprite/constructChildren()
        at flash.display::Sprite()
        at flash.display::MovieClip()
        at flash.display::Sprite/constructChildren()
        at flash.display::Sprite()
        at flash.display::MovieClip()
        at MainClass()


leofit 20.09.2010 13:25

Не совсем понял, что Вам надо, попробуйте так


Код AS3:

package
{
        import flash.display.*;
        import AdditionalClass;
        import flash.events.Event;
 
        public class MainClass extends MovieClip
        {
                public static var OBJ:MovieClip;
                private var star:AdditionalClass;
 
                public function MainClass():void
                {                       
                        this.addEventListener('stopStar', stopStarFunc, true);
                        OBJ = obj_mc;
                        star = obj_mc.star_mc;
                }
 
                private function stopStarFunc(event:Event):void {
                        trace('stopStar');
                }
        }
}

Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class AdditionalClass extends MovieClip
        {
                public function AdditionalClass():void
                {
                        trace('added');
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        this.addEventListener(MouseEvent.CLICK, stopStar);
                        this.addEventListener(Event.ENTER_FRAME, moveStar);
                }
 
                private function moveStar(e:Event):void
                {
                        this.rotation += 1;
                }
 
                private function stopStar(e:MouseEvent):void
                {
                        dispatchEvent(new Event('stopStar'));
                        this.removeEventListener(Event.ENTER_FRAME, moveStar);
                }
        }
}


Jackson 20.09.2010 13:47

http://siliren.ru/content/view/115/1/
В этом примере использовано такое обращение: MainClass(root).obj.obj_property, строки 20,21.
Попробуй, может получится)))

Dr_Bra 20.09.2010 14:15

я так понял нужно учить гет и сет методы
вот правильный скрипт
Код AS3:

package 
{
        import flash.display.*;
        import AdditionalClass;
 
        public class MainClass extends MovieClip
        {
                private var obj:MovieClip;
                private var star:AdditionalClass;
 
                public function MainClass():void
                {
                        obj = obj_mc;
                        star = obj.star_mc;
                        star.mainClass = this;
                }
        }
}

Код AS1/AS2:

package 
{
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class AdditionalClass extends MovieClip
        {
                private var _mainClass:DisplayObjectContainer;
 
                public function AdditionalClass():void
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        this.addEventListener(Event.ENTER_FRAME, moveStar);
                }
 
                public function set mainClass(mainClass : DisplayObjectContainer):void
                {
                        _mainClass = mainClass;
                        _mainClass["obj_mc"].addEventListener(MouseEvent.CLICK, stopStar);
                }
 
                private function moveStar(e:Event):void
                {
                        this.rotation +=  1;
                }
 
                private function stopStar(e:MouseEvent):void
                {
                        this.removeEventListener(Event.ENTER_FRAME, moveStar);
                }
        }
}



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

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