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

标签 flash actionscript-3 null scrollbar

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

我正在使用 Lee Brimelow's ScrollBar class 创建滚动条.我不得不修改它以在我的类文件中工作,并认为我在正确的轨道上,但我感到害怕:

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

当我运行调试时,它命中了我有 rollerUp) 的行;

滚动条类的代码:

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

起初我不确定是 stage 引用导致错误还是 rollerUp 函数,但由于我注释掉了 stage.removeEventListener 并添加了一个基本的跟踪语句,它仍然会抛出一个错误,所以我相信它与以下内容有关:

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

最佳答案

你的舞台是空的,因为新创建的对象还没有在舞台上。要解决此问题,请在构造函数中使用 ADDED_TO_STAGE 监听器,然后添加您的阶段事件。

关于flash - 帮助 - 使用 stage.addEventListener (ScrollBar) 时出现空对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1532955/

相关文章:

java - 如何通过仅在数组中引用来使对象为空?

scala - 在Scala中将null转换为Int和Double

flash - 当用户更新应用程序时,共享对象数据会消失吗?

ios - 如何在 Flash 中伪造 iOS 设备旋转

actionscript-3 - 在循环中创建具有不同参数的匿名函数

apache-flex - 安全错误 : Error #2000: No active security context

actionscript-3 - 在AS3中在循环中或循环前声明变量?

linux - 使用 ffmpeg 添加 actionscript

java - Eclipse 代码完成窗口突然占满整个屏幕

python - 第一次解析后无法检查列表中的空行