我正在使用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);
}
这是我的调试显示的内容:
起初我不确定它是否是导致错误或者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类:(任何提示赞赏!
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;
}
答案 0 :(得分:5)
您的舞台为空,因为新创建的对象尚未登台。要解决此问题,请在构造函数中使用ADDED_TO_STAGE侦听器,然后添加舞台事件。
答案 1 :(得分:3)
我认为你的问题是stage = null。原因只有一个:你试图进入阶段,当没有添加MC时(那么引用为空)。
答案 2 :(得分:2)
我同意Konrad,同样......在捕获MOUSE_DOWN事件时启动MOUSE_UP事件是更好的做法。
所以移动
stage.addEventListener(MouseEvent.MOUSE_UP, rollerUp);
在rollerDown函数内部。