Actionscript Добавление пользовательского класса в .fla - PullRequest
1 голос
/ 08 марта 2010

Я здесь упускаю что-то фундаментальное. У меня есть очень простой пользовательский класс, который рисует круг и флажок, и позволяет перетаскивать этот круговой спрайт, только если флажок установлен. компонент чекбокса вручную добавлен в библиотеку в моем .fla.

из панели действий моего проекта .fla:

var ball:DragBall = new DragBall();
addChild(ball);

мой пользовательский файл класса .as (расположенный в той же папке, что и .swf)

package
{
import fl.controls.CheckBox;
import flash.display.Sprite;
import flash.events.MouseEvent;

public class DragBall extends Sprite
    {
    private var ball:Sprite;
    private var checkBox:CheckBox;

    public function DragBall():void
        {
        drawTheBall();
        makeCheckBox();
        assignEventHandlers();
        }

    private function drawTheBall():void
        {
        ball = new Sprite();
        ball.graphics.lineStyle();
        ball.graphics.beginFill(0xB9D5FF);
        ball.graphics.drawCircle(0, 0, 60);
        ball.graphics.endFill();
        ball.x = stage.stageWidth / 2 - ball.width / 2;
        ball.y = stage.stageHeight / 2 - ball.height / 2;
        ball.buttonMode = true;
        addChild(ball);
        }

    private function makeCheckBox():void
        {
        checkBox = new CheckBox();
        checkBox.x = 10;
        checkBox.y = stage.stageHeight - 30;
        checkBox.label = "Allow Drag";
        checkBox.selected = false;
        addChild(checkBox);
        }

    private function assignEventHandlers():void
        {
        ball.addEventListener(MouseEvent.MOUSE_DOWN, dragSprite);
        ball.addEventListener(MouseEvent.MOUSE_UP, dropSprite);
        }

    private function dragSprite(evt:MouseEvent):void
        {
        if (checkBox.selected) {ball.startDrag();}
        }

    private function dropSprite(evt:MouseEvent):void
        {
        if (checkBox.selected) {ball.stopDrag();}
        }
    }
}

компиляция из .fla приводит к следующей ошибке, которую я не понимаю

 TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at DragBall/drawTheBall()
    at DragBall()
    at DragBall_fla::MainTimeline/frame1()

1 Ответ

2 голосов
/ 08 марта 2010

Проблема здесь в том, что вы пытаетесь получить доступ к сцене до того, как она станет доступной для этого класса. Лучший способ сделать это - добавить прослушиватель событий в вашем конструкторе для Event.ADDED_TO_STAGE, а затем, когда это событие произойдет, установить x и y относительно сцены.

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