0

我正在开发一款绘画游戏,一旦你点击画笔,鼠标就会切换到所述画笔的图形对应部分,让你在屏幕上绘画。如果没有选择画笔,鼠标将保持不变。

矩形和画笔位于单独的影片剪辑上,这使我可以在其上叠加 png 线条,以便您进行填充和绘制。

在场景 1 的动作层中,这是我更改鼠标的代码:

var cursor_mc:MovieClip;

if (CanvPark_mc.HugeSelected1 == true){
    cursor_mc = cursor1_mc;
}else if(CanvPark_mc.MediumSelected1 == true) {
    cursor_mc = cursor2_mc;
}else if(CanvPark_mc.SmallSelected1 == true) {
    cursor_mc = cursor3_mc;
}


stage.addEventListener(MouseEvent.MOUSE_MOVE,moveCursor);    
function moveCursor(myEvent:MouseEvent) { 
    if(CanvPark_mc.SmallSelected1 == false, CanvPark_mc.MediumSelected1 == false, CanvPark_mc.HugeSelected1 == false)
    { Mouse.cursor="auto";
    }else{
    setChildIndex(cursor_mc, this.numChildren-1);
    cursor_mc.x = (mouseX); 
    cursor_mc.y = (mouseY); 
    Mouse.hide();  
    }
}

每个画笔都有一个与之关联的布尔变量:Small、Medium 和 HugeSelected1,这样我就可以在代码中随时判断哪个被选中,哪个没有被选中。

现在,运行这段代码,一开始什么也没有发生,但是如果我点击任何画笔,它就会在输出中弹出。

TypeError: Error #2007: Parameter child must be non-null.
    at flash.display::DisplayObjectContainer/setChildIndex()
    at visibilityToggle/moveCursor()[visibilityToggle::frame1:42]

似乎专门指向

 setChildIndex(cursor_mc, this.numChildren-1);

老实说,我不知道是什么导致了这个错误。我认为更改鼠标光标会很简单。

我怎样才能解决这个问题?

4

1 回答 1

0

关于您在第一篇文章中发布的错误 - 当您使用的某些对象为空时,即未初始化或已销毁时,会发生此类错误。该错误通常概括为 NPE(空指针异常)。发生此类错误时,您应该检查所有对象是否存在。

发生第二个错误是因为您的 cursor_mc 没有父剪辑(即未添加到舞台)或父对象与您调用 setChildIndex 的对象不同。我建议阅读这个文档

要解决第二个问题,您可以检查父剪辑是否确实存在。另外,请记住,如果您重新分配了 cursor_mc 的值,则需要再次将其添加到舞台,并且您可能希望从舞台上移除前一个剪辑(假设 cursor1_mc、cursor2_mc、cursor3_mc 不在舞台上。)

这是一个粗略的例子:

var cursor_mc:MovieClip;

if (CanvPark_mc.HugeSelected1 == true){
    cursor_mc = cursor1_mc;
}else if(CanvPark_mc.MediumSelected1 == true) {
    cursor_mc = cursor2_mc;
}else if(CanvPark_mc.SmallSelected1 == true) {
    cursor_mc = cursor3_mc;
}


stage.addEventListener(MouseEvent.MOUSE_MOVE,moveCursor); 

function moveCursor(myEvent:MouseEvent) { 
    if(CanvPark_mc.SmallSelected1 == false && CanvPark_mc.MediumSelected1 == false && CanvPark_mc.HugeSelected1 == false)
    {
        Mouse.cursor="auto";
    }
    else if (cursor_mc)
    {
        addChild(cursor_mc);
        setChildIndex(cursor_mc, this.numChildren-1);
        cursor_mc.x = (mouseX); 
        cursor_mc.y = (mouseY); 
        Mouse.hide();  
    }
}
于 2016-08-16T10:12:10.963 回答