这个问题仍然存在,据我所知,没有找到可行的答案。我已经测试了唯一没有结果的答案。如果您计划回答我的问题,请您首先查看建议的解决方案,因为我无法让它发挥作用。
更新:好的我想我是这个,唯一不发送错误的块是checkforhit函数最底部的块,直到试图找出这意味着什么。
Cannot access a property or method of a null object reference.
at impossible_fla::MainTimeline/checkForHit()
所以我最近在一个框架上创建了一个带有计时器的项目,但出于某种原因,remove事件监听器并没有工作。
这是错误文本 TypeError:错误#1009:无法访问空对象引用的属性或方法。 at impossible_fla :: MainTimeline / checkForHit()
即使我做了removeEventListener(Event.ENTER_FRAME,checkForHit); ?
stop();
var currentObject:MovieClip = null;
var dragging:Boolean = false;
initDrag(block1);
initDrag(block2);
initDrag(block3);
initDrag(block4);
var TCount:Number = 50;
var TTimer:Timer = new Timer(100,TCount);
TTimer.addEventListener(TimerEvent.TIMER, Tcountdown);
function Tcountdown(e:TimerEvent):void
{
if (TCount == 1)
{
trace("done");
TTimer.removeEventListener(TimerEvent.TIMER, Tcountdown);
gotoAndStop("lose");
}
else
{
Queen.alpha += 0.02;
TCount--;
trace(TCount);
}
}
function initDrag(obj:MovieClip )
{
obj.addEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.addEventListener(MouseEvent.MOUSE_UP,stopADrag);
}
function endDrag(obj:MovieClip )
{
obj.removeEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.removeEventListener(MouseEvent.MOUSE_UP,stopADrag);
removeEventListener(Event.ENTER_FRAME, checkForHit);
}
function startADrag(e:MouseEvent):void
{
currentObject = (MovieClip)(e.target);
var rect:Rectangle = new Rectangle(0,0,stage.stageWidth - currentObject.width,stage.stageHeight - currentObject.height + 100);
currentObject.startDrag(false,rect);
dragging = true;
}
function stopADrag(e:MouseEvent):void
{
if (currentObject != null)
{
dragging = false;
currentObject.stopDrag();
}
}
addEventListener(Event.ENTER_FRAME, checkForHit);
function checkForHit(e:Event):void
{
if (dragging)
{
if (block2.hitTestObject(dragtest))
{
endDrag(block2);
removeEventListener(Event.ENTER_FRAME, checkForHit);
TTimer.start();
}
if (block3.hitTestObject(dragtest))
{
removeEventListener(Event.ENTER_FRAME, checkForHit);
endDrag(block3);
removeEventListener(Event.ENTER_FRAME, checkForHit);
gotoAndStop("lose");
}
if (block4.hitTestObject(dragtest))
{
endDrag(block4);
removeEventListener(Event.ENTER_FRAME, checkForHit);
gotoAndStop("lose");
}
if (block1.hitTestObject(dragtest))
{
removeEventListener(Event.ENTER_FRAME, checkForHit);
endDrag(block1);
gotoAndStop("lose");
}
}
}
答案 0 :(得分:1)
如果存在TTimer对象,则可以检查,然后删除事件侦听器
if(TTimer)
{
TTimer.removeEventListener(TimerEvent.TIMER, Tcountdown);
}
答案 1 :(得分:1)
Queen
,block1
,block2
,block3
和block4
为null
或其他undefined
。没有任何摆弄计时器将解决这个问题。检查您的实例名称,确保您引用的对象与正在执行的代码位于同一帧中。
答案 2 :(得分:0)
也许您应该简化checkForHit功能
function checkForHit(e:Event):void
{
if (dragging)
{
if (block2.hitTestObject(dragtest))
{
endDrag(block2);
TTimer.start();
}
else
{
if (block1.hitTestObject(dragtest))
{
endDrag(block1);
}
if (block3.hitTestObject(dragtest))
{
endDrag(block3);
}
if (block4.hitTestObject(dragtest))
{
endDrag(block4);
}
gotoAndStop("lose");
}
// removeEventListener here is not needed because it is within endDrag()
}
}