开发者

Actionscript Adding Custom Class To .fla

i'm missing something fundamental here. i have a very simple custom class that draws a circle and a checkbox, and only allows dragging of that circle sprite if the checkbox is checked. a checkbox component is manually added to the library in my .fla.

from my .fla project's actions panel:

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

my custom class .as file (located in the same folder as the .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();}
        }
    }
}

compiling from the .fla results in the following error, which i don't understand

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


The problem here is that you are trying to access the stage before it is available to this class. The best way to do this is add an Event listener in your constructor for Event.ADDED_TO_STAGE and then once this event occurs setting the x and y relative to the stage.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜