Событие мыши Action Script 3.0 в пакете класса

У меня проблема с использованием события щелчка мыши внутри класса, я абсолютный новичок в Action Script.

что я хочу, так это то, что если я нажму кнопку btn_MClick, он должен запустить скрипт, но каждый раз, когда я нажимаю его, я получаю сообщение об ошибке, что btn_MClick не определен.

btn_MClick находится на сцене и с именем экземпляра, если btn_MClick

public class gunShip1 extends MovieClip
{
    var moveCount = 0;

    public function gunShip1()
    {
        stage.addEventListener(KeyboardEvent.KEY_DOWN, moveGunShip1);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, ShootGunShip1)
                    btn_MClick.addEventListener(MouseEvent.MOUSE_DOWN.KEY_DOWN,   ShootGunShip1);;

    }


function ShootGunShip1(evt: MouseEvent)
{


            var s_Bullet:survBullet = new survBullet();
            var stagePos:Point = this.localToGlobal (new    Point(this.width / 2-10, this.height));;
            s_Bullet.x = stagePos.x;
            s_Bullet.y = stagePos.y;

            parent.addChild(s_Bullet);
            //play sound
            var gun_sound:ricochetshot = new ricochetshot();
            gun_sound.play();
        }
}

Пожалуйста, я совершенно не знаю, что делать, и мне почему-то кажется, что весь процесс неправильный.


person Martin    schedule 13.04.2013    source источник


Ответы (1)


Ваш класс gunShip1 не имеет свойства btn_MClick, root или класса документа.

В основном происходит то, что вы поместили свою кнопку на сцену, что делает ее экземпляром, принадлежащим корневому контейнеру. На данный момент вы пытаетесь ссылаться на кнопку как на свойство gunShip1.

Что вы действительно должны сделать здесь, так это управлять нажатием кнопки отдельно для gunShip1 и иметь этот отдельный код, вызывающий методы gunShip1. Например, вы можете иметь это в своем классе документов:

public class Game extends MovieClip
{

    private var _ship:gunShip1;


    public function Game()
    {
        _ship = new gunShip1();

        // The Document Class will have reference to objects on the stage.
        btn_MClick.addEventListener(MouseEvent.CLICK, _click);
    }


    private function _click(e:MouseEvent):void
    {
        _ship.shoot();
    }

}

И затем ваш обновленный метод shoot в gunShip1:

public function shoot():void
{
    var s_Bullet:survBullet = new survBullet();
    var stagePos:Point = this.localToGlobal (new Point(this.width / 2 - 10, this.height));
    s_Bullet.x = stagePos.x;
    s_Bullet.y = stagePos.y;
    parent.addChild(s_Bullet);

    var gun_sound:ricochetshot = new ricochetshot();
    gun_sound.play();
}

Идея состоит в том, что gunShip1 не должен отвечать за ввод данных пользователем (мышь, клавиатура и т. д.). Вместо этого это должен быть отдельный класс, который сообщает gunShip1, что он должен что-то сделать.

person Marty    schedule 13.04.2013
comment
Спасибо за быстрый ответ, теперь я понимаю намного лучше, спасибо за помощь. как я могу заставить это работать в сценарии действия, а не в другом классе, так как все мои кнопки и видеоклипы находятся на одной странице - person Martin; 13.04.2013
comment
Потому что я все еще получаю сообщение об ошибке Доступ к неопределенному свойству btn_MClick при наличии другого класса для обработки щелчка мыши - person Martin; 13.04.2013