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

In8Finity 14.01.2013 19:13

Как в одном классе увидеть другой?
 
Здраствуйте.
Пишу арканоид. Пробую использовать классы.
Не получается из одного класса отслеживать что происходит в другом.
Поясню.
Пока самое начало - у меня класса всего три: Main, Ball и Platform.

в Main.as просто добавляется на сцену фон и запускаются (наверное тут другое слово правильнее) остальные два класса.

Код AS3:

                private function createScene():void 
                {
                        var back_game:MovieClip = new Back_mc(); addChild(back_game);
 
                        addChild ( new Platform() );
                        addChild ( new Ball() );
                }

В Platform.as добавляется на сцену платформа для отбивания шарика и привязывается к мышке.

Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class Platform extends Sprite
        {
 
                private var platform:MovieClip;
 
                public function Platform()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        createPlatform();
 
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, platformMouseMove);
                        this.addEventListener(Event.ENTER_FRAME, platformKeyboardMove);
                }
 
                private function createPlatform():void
                {
                        platform =  new Platform_mc();
                        addChild(platform);
                        platform.x = 300;
                        platform.y = 445;
                }
 
 
                // двигаем платформу вслед за мышкой
                public function platformMouseMove(e:MouseEvent):void
        {
            platform.x = mouseX - 50;
            if (platform.x < 10) { platform.x = 10 }
            if (platform.x + 100 > 630) { platform.x = 630 - 100}
        }
        }
}

И в классе Ball.as всё что связано с шариком. Отскоки его от стен и взаимодействие с платформой.
Вот у меня как раз не получается взаимодействовать с платформой. (см. закомменченную строку в самом низу - это то, как я себе это представлял)

Код AS3:

package  
{
        import flash.display.*;
        import flash.events.Event;
 
        public class Ball extends Sprite
        {
                private var ball:MovieClip;
                private var speedX:int = 3;
                private var speedY:int = -3;
 
                public function Ball()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        createBall();
                        addEventListener(Event.ENTER_FRAME, moveBall);
                }
 
                // создаём ball
                private function createBall():void
                {
                        ball =  new Ball_mc();
                        addChild(ball);
                        ball.x = 320;
                        ball.y = 400;
                }
 
                private function moveBall(e:Event = null):void
                {
                        ball.x += speedX;
                        ball.y += speedY;
 
 
                        // Столкновение со стенкой
                        if (((ball.x + 4) > 630) || ((ball.x - 4) < 10) )
                        speedX = - speedX;
                        if (((ball.y + 4) > 470) || ((ball.y - 4) < 50) )
                        speedY = - speedY;
 
                        // Столкновение с platform
                        //if (ball.hitTestObject(platform)) speedY = - speedY;
                }
        }
}

Как же мне увидеть в классе Ball, что мой шарик столкнулся с платформой?

strangedk 14.01.2013 20:06

Вместо
Цитата:

Сообщение от In8Finity (Сообщение 1115697)
addChild ( new Platform() );
addChild ( new Ball() );

Нужно
Код AS3:

private var _platform:Platform = new Platform();
private var _ball:Ball = new Ball();
 
addChild (_platform);
addChild (_ball);

Подозреваю что вычисления столкновений должны быть в главном классе. Ведь этот класс знает о платформе и шаре, соответственно вы сможете проверять на столкновение просто используя объявленные выше переменные.

Код AS3:

if (_platform.hitTestObject(_ball))

А вы случаем дальше SharedObject не будете прикручивать? :)


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

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