AS3 自定义光标点击
AS3 Custom Cursor On Click
我正在开发一款绘画游戏,一旦您单击画笔,鼠标就会切换到所述画笔的图形对应物,并让您在屏幕上作画。如果没有选择笔刷,鼠标将保持不变。
矩形和画笔位于单独的 Movieclip 上,这允许我在其上叠加 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);
老实说,我不知道是什么导致了这个错误。我以为更改我的鼠标光标会这么简单。
我该如何解决这个问题?
关于您在第一个 post 中输入的错误 post - 当您使用的某些对象为 null,即未初始化或已经销毁时,会发生此类错误。该错误通常归纳为 NPE(空指针异常)。发生此类错误时,您应该检查所有对象是否存在。
第二个错误是因为您的 cursor_mc 没有父剪辑(即它没有添加到舞台)或父对象与您调用 setChildIndex 的对象不同。我建议阅读 this doc
要解决第二个问题,您可以检查父剪辑是否确实存在。另外,请记住,如果您重新分配了 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();
}
}
我正在开发一款绘画游戏,一旦您单击画笔,鼠标就会切换到所述画笔的图形对应物,并让您在屏幕上作画。如果没有选择笔刷,鼠标将保持不变。
矩形和画笔位于单独的 Movieclip 上,这允许我在其上叠加 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);
老实说,我不知道是什么导致了这个错误。我以为更改我的鼠标光标会这么简单。
我该如何解决这个问题?
关于您在第一个 post 中输入的错误 post - 当您使用的某些对象为 null,即未初始化或已经销毁时,会发生此类错误。该错误通常归纳为 NPE(空指针异常)。发生此类错误时,您应该检查所有对象是否存在。
第二个错误是因为您的 cursor_mc 没有父剪辑(即它没有添加到舞台)或父对象与您调用 setChildIndex 的对象不同。我建议阅读 this doc
要解决第二个问题,您可以检查父剪辑是否确实存在。另外,请记住,如果您重新分配了 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();
}
}