帮助 - 使用stage.addEventListener(ScrollBar)时出现Null对象错误

时间:2009-10-07 17:09:59

标签: flash actionscript-3 null scrollbar

嘿伙计们,希望得到一些帮助:(现在已经坚持了几天。

我正在使用Lee Brimelow's ScrollBar class创建一个ScrollBar。我不得不修改它以在我的类文件中工作,并认为我在正确的轨道上,但我得到了可怕的:

错误#1009:无法访问空对象引用的属性或方法错误。

当我运行调试时,它会在我有 rollerUp)的行上点击;

SCROLLBAR CLASS的代码:

import flash.display.*;
import flash.events.*;
import caurina.transitions.*;

public class ScrollBar extends MovieClip
{
    private var yOffset:Number;
    private var yMin:Number;
    private var yMax:Number;
    private var thumbsnailTab:MovieClip;
    private var theRoller:MovieClip;

    public function ScrollBar(myRoller:MovieClip, myTrack:MovieClip, thumbsnails:MovieClip):void
    {
        yMin = 0;
        yMax = myTrack.height - myRoller.height;
        theRoller = myRoller;
        thumbsnailTab = thumbsnails;
        myRoller.addEventListener(MouseEvent.MOUSE_DOWN, rollerDown);
        stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);
    }

这是我的调试显示的内容:

alt text

起初我不确定它是否是导致错误或者rollerUp函数的阶段引用,但是因为我注释掉了stage.removeEventListener并添加了一个基本的trace语句,所以它仍然会引发错误,所以我相信它与以下内容有关:

stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);

现在我已导入活动。*;到ScrollBar类......也许问题出现在我的主类中,我在那里为ScrollBar创建图形以及将ScrollBar添加到显示列表中?

主要课程代码:

// Creating Graphics
        track1 = new Track;
        track1.x = 0;
        track1.y = 0;

        roller1 = new Roller;
        roller1.x = 0;
        roller1.y = 0;

        sc1 = new EmptyMov;
        sc1.x = 764;
        sc1.y = 470;

        sc1.addChild(track1);
        sc1.addChild(roller1);

// Adding ScrollBar to Stage
scroll1 = new ScrollBar(roller1, track1, tab1);
container.addChild(sc1);
container.addChild(scroll1);
addChild(container);

我被困在这里,不知道为什么我得到那个Null参考错误,以及不确定我是否正确地创建图形以及正确使用ScrollBar类:(任何提示赞赏!

alt text


更新代码工作! :d

public function ScrollBar(myRoller:MovieClip, myTrack:MovieClip, thumbsnails:MovieClip):void
    {
        yMin = 0;
        yMax = myTrack.height - myRoller.height;
        theRoller = myRoller;
        thumbsnailTab = thumbsnails;
        myRoller.addEventListener(MouseEvent.MOUSE_DOWN, rollerDown);
    }

    private function rollerDown(e:MouseEvent):void
    {
        stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, rollerMove);
        yOffset = mouseY - theRoller.y;
    }

alt text

3 个答案:

答案 0 :(得分:5)

您的舞台为空,因为新创建的对象尚未登台。要解决此问题,请在构造函数中使用ADDED_TO_STAGE侦听器,然后添加舞台事件。

答案 1 :(得分:3)

我认为你的问题是stage = null。原因只有一个:你试图进入阶段,当没有添加MC时(那么引用为空)。

答案 2 :(得分:2)

我同意Konrad,同样......在捕获MOUSE_DOWN事件时启动MOUSE_UP事件是更好的做法。

所以移动

stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);

在rollerDown函数内部。