AS3 中的错误 #1009
Posted
技术标签:
【中文标题】AS3 中的错误 #1009【英文标题】:Error #1009 in AS3 【发布时间】:2014-12-20 22:14:21 【问题描述】:这个问题仍然悬而未决,据我所知没有找到可行的答案。我已经测试了唯一的当前答案,但没有结果。如果您确实打算回答,我请您先查看提出的解决方案,因为我无法让它发挥作用。
更新:好的,我想我正在使用这个,唯一不发送错误的块是 checkforhit 函数最底部的块,直到试图弄清楚这意味着什么。
Cannot access a property or method of a null object reference.
at impossible_fla::MainTimeline/checkForHit()
所以我最近在一个帧上创建了一个带有计时器的项目,但由于某种原因,删除事件侦听器无法正常工作。
这是错误文本 TypeError:错误 #1009:无法访问空对象引用的属性或方法。 在不可能的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");
【问题讨论】:
好的,我发现我只需要创建一个解决方法,以便每个命中的变量都为真。然后让一些东西测试变量是否为真。 Reaaaaaly 愚蠢的错误将在稍后发布代码。 【参考方案1】:也许你应该简化你的 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()
【讨论】:
@C Parcell 是的,虽然我必须让监听器类似于addEventListener(Event.Collision Event, checkForHit);
,这样它才能在拖动为真时立即执行。我不知道在哪里可以找到动作脚本事件列表。【参考方案2】:
Queen
、block1
、block2
、block3
和 block4
是 null
或 undefined
。再多的摆弄计时器也无法解决这个问题。检查您的实例名称,确保您引用的对象与正在执行的代码位于同一帧。
【讨论】:
所有对象都在那里问题似乎是我更改帧后运行的函数 checkForHit(),即使我已经删除了它。 @Flashdace 好了,你有它。在调用gotoAndStop
之前移除事件监听器。我会在gotoAndStop
之前排队,而不是通过一些复杂的路径依赖它。
已经尝试过没有解决它,但我想我在这个,唯一不发送错误的块是 checkforhit 函数最底部的块。仍在试图弄清楚这意味着什么。【参考方案3】:
您可以检查 TTimer 对象是否存在,然后删除事件监听器
if(TTimer)
TTimer.removeEventListener(TimerEvent.TIMER, Tcountdown);
【讨论】:
如何修复 1009?对不起,我是菜鸟。我实现了这个,它没有改变任何东西。 它检查 TTimer 是否为 null,如果它为 null,则在这种情况下不进入,并且不要在 nill 对象引用上添加 removeListener 函数 我应该把这段代码放在哪里?我尝试添加它,但没有任何改变。 你可以复制并粘贴你的整个代码吗?这听起来像是我遇到过的最愚蠢的问题,但我的就是不工作。 lool :D 你的电影剪辑是未定义的,你告诉我问题出在 Timer :D以上是关于AS3 中的错误 #1009的主要内容,如果未能解决你的问题,请参考以下文章
AS3:TypeError:错误 #1009:无法访问空对象引用的属性或方法。需要帮助
错误 #1009:无法访问空对象引用 AS3 项目的属性或方法
TypeError:错误#1009:无法访问null对象引用as3的属性或方法