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

In8Finity 28.01.2013 12:58

как вызвать функцию из подподкласса?
 
Подскажите пожалуйста с синтаксисом.
Я намудрил, конечно, но может быть можно это побороть.

Итак, есть главный класс Game который создаёт подкласс Ball который создаёт подкласс Bonus
Game -> Ball -> Bonus
Создаётся оно так:

Код AS3:

// в классе Game
_ball = new Ball();
addChild (_ball);
 
// в классе Ball
_bonus = new Bonus(br);
addChild (_bonus);

Если я хочу из Ball вызвать какую-то процедуру главного класса Game я делаю так и это работает:

Код AS3:

Game(this.parent).myProcedure();

А вот как мне вызваь эту же процедуру из класса Bonus?

nuToH 28.01.2013 13:05

Game(parent.parent).myProcedure(); //но это худшее решение

udaaff 28.01.2013 13:13

Передать ссылку на game в bonus.

expl 28.01.2013 13:36

угу
Код AS3:

public class Game {
    ...
    _ball = new Ball(this);
    ...
}
 
public class Ball {
    private var _game:Game;
    public function Ball(game:Game) {
        _game = game;
    }
    ...
    _game.myProcedure();
}

Цитата:

Game(this.parent).myProcedure();
Это не работает, по-ходу из-за того, что либо в конструкторе вызываете, когда объект ещё не добавлен, либо когда уже снесли или переместили в другой контейнер

nuToH 28.01.2013 14:01

вариант на ивентах:
Код AS3:

public class Game extends Sprite {
 
        public function Game() {
                super();       
                super.addEventListener( "myEvent", this.onMyEvent );       
                super.addChild( new Ball() );
        }
 
        private function onMyEvent( event:Event ):void {
                trace("onMyEvent");
                this.myFunction( event.target as Bonus );
        }
 
        private function myFunction( bonus:Bonus ):void {
                trace("myFunction", bonus);
        }
}
 
public class Ball extends Sprite {
 
        public function Ball() {
                super();
                super.addChild( new Bonus() );
        }
 
}
 
public class Bonus extends Sprite {
 
        public function Bonus() {
                super();       
                setTimeout( this.onTimeOut, 100 );
        }
 
        private function onTimeOut():void {
                super.dispatchEvent( new Event( "myEvent", true, false ) );
        }
 
}


In8Finity 28.01.2013 14:43

Спасибо большое. Буду пробовать.


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

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