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

In8Finity 18.01.2013 16:33

Взаимодействие классов
 
Разбираюсь потихоньку с классами на примере игры арканоид.
Добрался вот до чего.
Когда шарик ударяет в кирпичик - из него вываливается бонус.
В классе шарика (Ball.as) у меня один из элементов столкновения выглядит так:
Код AS3:

                                if (Game.bricks.getChildAt(i) is Brick1_mc) 
                                {
                                        var br:Brick1_mc = Game.bricks.getChildAt(i) as Brick1_mc;
if (br.up.hitTestPoint(ball.x, ball.y, true)) { createBonus(); Game.bricks.removeChild(br); speedY = - speedY;  }

Функция createBonus выглядит так:
Код AS3:

                private function createBonus():void 
                {
                        _bonus = new Bonus();
                        addChild (_bonus);
                }

Тоесть здесь я, насколько я понял, подключаю класс Bonus. Интерес был как раз в том, чтобы вынести всё, касающееся этого Бонуса в отдельный класс.
Класс Бонус у меня выглядит так:

Код AS3:

        public class Bonus extends Sprite
        {
                private var bonus:MovieClip;
 
                public function Bonus()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        createBonus();
                }               
 
                // создаём bonus
                private function createBonus():void
                {
                        bonus =  new Bonus_mc();
                        addChild(bonus);
                        bonus.x = br.x;
                        bonus.y = br.y;
                }

И вот тут возникает ошибка. Класс Бонус не понимает, что такое br.x и br.y из класса Ball.as
Как мне правильно указать в этом классе что такое br, чтобы он не ругался?

dimarik 18.01.2013 17:51

Очевидно,

class Ball

Код AS3:

private function createBonus():void {
    _bonus =  new Bonus_mc();
    addChild(_bonus);
    _bonus.x = br.x;
    _bonus.y = br.y;
}

и избавляемся от class Bonus

In8Finity 18.01.2013 18:14

Это да. Это можно так сделать. Но я хотел бы вынести в отдельный класс всё, что качается Бонусов (появление, движение, соприкосновение с ракеткой)
Поэтому я и хотел бы узнать - как именно из класса Bonus.as увидеть что-то, что происходит в другом классе.

dimarik 18.01.2013 18:37

Передайте этот класс в класс Bonus

Код AS3:

public function Bonus(parent:Ball) {
    _parent = parent;
}
 
private var  _parent:Ball;
 
private function createBonus():void {
    _bonus =  new Bonus_mc();
    addChild(_bonus);
    _bonus.x = _parent.br.x;
    _bonus.y = _parent.br.y;
}


In8Finity 18.01.2013 19:47

Получилось ещё сделать вот как.
В классе Ball:
Код AS3:

if (br.up.hitTestPoint(ball.x, ball.y, true)) { createBonus(br); Game.bricks.removeChild(br); speedY = - speedY;  }
....
                private function createBonus(br:MovieClip):void
                {
                        _bonus = new Bonus(br);
                        _bonus.setPlatform(p);
                        addChild (_bonus);
                }

И в классе Bonus:
Код AS3:

                public function Bonus(br:MovieClip)
                {
                        bonus =  new Bonus_mc();
                        addChild(bonus);
                        bonus.x = br.x;
                        bonus.y = br.y;



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

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