2013-03-27 77 views
0

我想请求您对我的代码的帮助。它编译好,但是在达到下面的代码时它会抛出这个错误#1009:无法在HiddenObjects_fla :: MainTimeline/myFunction()[HiddenObjects_fla.MainTimeline :: frame12:9]上访问空对象引用的属性或方法AS3:#1009:无法访问空对象引用的属性或方法

我的主时间轴中没有框架12。

import flash.display.Sprite; 
import flash.events.*; 

addEventListener(Event.ENTER_FRAME,myFunction); 
function myFunction(event:Event):void { 
var lazania:int = 0; 
typewriter_piece1.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
typewriter_piece1.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
typewriter_piece2.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
typewriter_piece2.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
typewriter_piece3.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
typewriter_piece3.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
typewriter_piece4.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
typewriter_piece4.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
typewriter_piece5.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
typewriter_piece5.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
typewriter_piece6.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
typewriter_piece6.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
stop(); 

//typewriter piece 1 = K 
function start_drag_piece1(event:MouseEvent):void{ 
typewriter_piece1.startDrag(); 
}; 
function stop_drag_piece1(event:MouseEvent):void{ 
if (Target1.hitTestObject(typewriter_piece1.Target1_Button)){ 
    typewriter_piece1.stopDrag(); 
    typewriter_piece1.x = Target1.x; 
    typewriter_piece1.y = Target1.y; 
    typewriter_piece1.mouseEnabled = false; 
    typewriter_piece1.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 
} 
else{ 
    typewriter_piece1.x = 25; 
    typewriter_piece1.y = 139,95; 
    typewriter_piece1.stopDrag(); 
} 
}; 

//typewriter piece 2 = Y 
function start_drag_piece2(event:MouseEvent):void{ 
typewriter_piece2.startDrag(); 
}; 
function stop_drag_piece2(event:MouseEvent):void{ 
if (Target2.hitTestObject(typewriter_piece2.Target2_Button)){ 
    typewriter_piece2.stopDrag(); 
    typewriter_piece2.x = Target2.x; 
    typewriter_piece2.y = Target2.y; 
    typewriter_piece2.mouseEnabled = false; 
    typewriter_piece2.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 

} 
else{ 
    typewriter_piece2.x = 25; 
    typewriter_piece2.y = 179,95;  
    typewriter_piece2.stopDrag(); 
} 
}; 

//typewriter piece 3 = Π 
function start_drag_piece3(event:MouseEvent):void{ 
typewriter_piece3.startDrag() 
}; 
function stop_drag_piece3(event:MouseEvent):void{ 
if (Target3.hitTestObject(typewriter_piece3.Target3_Button)){ 
    typewriter_piece3.stopDrag(); 
    typewriter_piece3.x = Target3.x; 
    typewriter_piece3.y = Target3.y; 
    typewriter_piece3.mouseEnabled = false; 
    typewriter_piece3.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 
} 
else{ 
    typewriter_piece3.x = 25; 
    typewriter_piece3.y = 219,95;  
    typewriter_piece3.stopDrag(); 
} 
}; 

//typewriter piece 4 = P 
function start_drag_piece4(event:MouseEvent):void{ 
typewriter_piece4.startDrag() 
}; 
function stop_drag_piece4(event:MouseEvent):void{ 
if (Target4.hitTestObject(typewriter_piece4.Target4_Button)){ 
    typewriter_piece4.stopDrag(); 
    typewriter_piece4.x = Target4.x; 
    typewriter_piece4.y = Target4.y; 
    typewriter_piece4.mouseEnabled = false; 
    typewriter_piece4.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 
} 
else{ 
    typewriter_piece4.x = 25; 
    typewriter_piece4.y = 259,95; 
    typewriter_piece4.stopDrag(); 
} 
}; 

//typewriter piece 5 = O 
function start_drag_piece5(event:MouseEvent):void{ 
typewriter_piece5.startDrag() 
}; 
function stop_drag_piece5(event:MouseEvent):void{ 
if (Target5.hitTestObject(typewriter_piece5.Target5_Button)){ 
    typewriter_piece5.stopDrag(); 
    typewriter_piece5.x = Target5.x; 
    typewriter_piece5.y = Target5.y; 
    typewriter_piece5.mouseEnabled = false; 
    typewriter_piece5.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 
} 
else{ 
    typewriter_piece5.x = 25; 
    typewriter_piece5.y = 299,95; 

    typewriter_piece5.stopDrag(); 
} 
}; 

//typewriter piece 6 = Σ 
function start_drag_piece6(event:MouseEvent):void{ 
typewriter_piece6.startDrag() 
}; 
function stop_drag_piece6(event:MouseEvent):void{ 
if (Target6.hitTestObject(typewriter_piece6.Target6_Button)){ 
    typewriter_piece6.stopDrag(); 
    typewriter_piece6.x = Target6.x; 
    typewriter_piece6.y = Target6.y; 
    typewriter_piece6.mouseEnabled = false; 
    typewriter_piece6.mouseChildren = false; 
    lazania++; 
    if(lazania == 6){ 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
     typewriter_piece1.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
     typewriter_piece2.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
     typewriter_piece3.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
     typewriter_piece4.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
     typewriter_piece5.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
     typewriter_piece6.removeEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
     gotoAndStop(1, "Scene 5"); 
    } 
    //checklazania(lazania); 
} 
else{ 
    typewriter_piece6.x = 25; 
    typewriter_piece6.y = 339,95; 
    typewriter_piece6.stopDrag(); 
} 
}; 

} 
+0

这就是一些疯狂的编码,你应该寻找到的模式,循环之类的话,它可以为你节省很多。即使其中大部分只是剪切和粘贴之前的功能,其中很容易迷失 – joshua 2013-03-28 15:27:22

回答

2

你的问题可能是这样的:

addEventListener(Event.ENTER_FRAME,myFunction); 

即使你打电话stop(),你myFunction将继续每帧按你的应用程序的帧速率运行。因此,如果帧速率设置为24,myFunction将每秒运行24次。这意味着你每秒钟重复添加所有这些听众24次。 (假设你的myFunction以鼠标事件监听器结束,你错过了关闭},所以我必须猜测)。

你也从来没有移除ENTER_FRAME监听,所以你(通过你的gotoAndStop线)转移到你的程序的其他部分后,也即myFunction将继续被称为每秒24次。 1009错误可能是因为你已经移动到另一个框架,其中你的typewriter_piece实例不再存在,但ENTER_FRAME处理程序仍然反复运行该功能。

采取以下代码:

typewriter_piece1.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece1); 
typewriter_piece1.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece1); 
typewriter_piece2.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece2); 
typewriter_piece2.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece2); 
typewriter_piece3.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece3); 
typewriter_piece3.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece3); 
typewriter_piece4.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece4); 
typewriter_piece4.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece4); 
typewriter_piece5.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece5); 
typewriter_piece5.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece5); 
typewriter_piece6.addEventListener(MouseEvent.MOUSE_DOWN, start_drag_piece6); 
typewriter_piece6.addEventListener(MouseEvent.MOUSE_UP, stop_drag_piece6); 
stop(); 

缺货myFunction的的(所以它只是运行在框架上),并删除的代码ENTER_FRAME听者线。


至于效率和理智小费,尝试做如下:

//This will add all your listeners with just 3 lines of code 
for(var i:int=1;i<7;i++){ 
    this["typewriter_piece"+i].addEventListener(MouseEvent.MOUSE_DOWN, startDrag); 
} 

//you can use the same drag handler function, and get the item with event.currentTarget 
function startDrag(event:MouseEvent):void { 
    var typewriter:MovieClip = event.currentTarget as MovieClip; //gets the one that was clicked/mouse downed 

    var target:MovieClip = getTarget(typewriter); //get the appropriate target 

    if(target.hitTestObject(typewriter)){ 
     typewriter.stopDrag(); 
     //do the rest 
    } 
} 

//get the appropriate target 
function getTarget(typeWriter:MovieClip):MovieClip { 
    for(var i:int=1;i<7;i++){ 
     if(typeWriter == this["typewriter_piece"+i]){ 
      return this["Target"+i]; 
     } 
    } 
} 
+0

谢谢..清楚地解释了问题的答案.. – 2013-03-28 11:38:12

0

尝试删除myfunction函数。只要它是一个功能,它就可以在整个程序中生效。如果你把它拿出来,它只能在特定的框架中生存。这样,只要您搬出去,程序就不会询问,检查或打扰该代码。由于您的代码顶部的输入框命令,您在输入框架后立即生效。让所有其他事物保持原样......很高兴看到解决方案能够发挥作用! :P

+0

谢谢,它解决了空引用问题。现在我遇到了一种不同类型的bug。我第一次尝试运行程序的上述部分时,它会自动将3帧退回到另一个场景中,这在代码中甚至没有提及。如果我从那里正常继续我没有遇到任何问题。 – 2013-03-27 18:48:13

相关问题