2016-08-16 48 views
0

我提出了一个新问题,因为它有意义,因为问题不再一样了。AS3自定义游标隐形

我正在着色游戏。 CanvPark_mc是具有创建画布和所有画笔细节所在位置的细节的Movieclip。巨大,中等和SmallSelected1变量是单击画笔时更改的变量,因此您可以识别它们。

我想根据上次点击的画笔切换光标。这可以通过第一个参数来完成。 现在,这是我的代码转换,得益于@NBooo的帮助与此代码previous question

var cursor_mc: MovieClip = new MovieClip(); 

if (CanvPark_mc.HugeSelected1 == true) { 
    cursor_mc = cursor1_mc; //Big Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.MediumSelected1 == true) { 
    cursor_mc = cursor2_mc; //Medium Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.SmallSelected1 == true) { 
    cursor_mc = cursor3_mc; //Small Cursor 
    removeChild(cursor_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 = stage.mouseX; 
     cursor_mc.y = stage.mouseY; 
     cursor_mc.mouseChildren = cursor_mc.mouseEnabled = false; 
     Mouse.hide(); 

    } 

} 

的问题,不幸的是,是,每当我按一下按钮说,光标消失。它不会改变我以前制作的任何一个影片剪辑。

请注意,if块中的removeChild有希望在过去单击它们之后删除屏幕上以前的cursor_mc实例。

在测试中,它只会改变,在第一个if块中,其中一个参数具有a =而不是==。

例子:

if (CanvPark_mc.HugeSelected1 == true) { 
    cursor_mc = cursor1_mc; // Big Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.MediumSelected1 == true) { 
    cursor_mc = cursor2_mc; //Medium Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.SmallSelected1 = true) { 
    cursor_mc = cursor3_mc; //This is the one he'll run, showing the smallest cursor 
    removeChild(cursor_mc); 
} 

另外,如果他们都降低到刚刚=,代码将如果列表中选择最后一个。 我认为我的代码存在问题,我无法分辨尝试几小时后发生了什么。

难道你们能帮我弄清楚吗?

+0

您正在将'cursor_mc'设置为新光标,但是您立即将其从舞台上删除?我想你想删除旧的光标,而不是新的。 EG:在更改游标之前,尝试执行'removeChild'。 –

+0

@SunilD。 甚至在'removeChild(cursor_mc);'之前,它已经在做这个问题。 而且,如果我事先做好了,它会给我这个错误: '错误#2025:提供的DisplayObject必须是调用者的孩子。' – TwistedRaven

+0

关于上次代码示例,您将'== == '=',这是有道理的,因为一个'='正在做一个赋值,它不是一个布尔表达式。所以当你在'if'语句的条件中使用'='时,它通常会解析为“truthy”。当你改变所有的if语句来使用一个'='时,它们都是真的,因此你可以看到最后一条if语句的结果。所有这些都说明你的'if'陈述中的条件可能不会评估为“真实”......并且你可能会尝试检查它们。 –

回答

0

我找到了自己的问题的答案,所以我会张贴代码来帮助别人。

var cursor_mc: MovieClip = new MovieClip(); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor); 

    function moveCursor(myEvent: MouseEvent) { 

    if (CanvPark_mc.HugeSelected1 == true) { 

     cursor_mc = cursor1_mc; 
     cursor1_mc.visible = true; 
     cursor2_mc.visible = false; 
     cursor3_mc.visible = false; 
    } 

    if (CanvPark_mc.MediumSelected1 == true) { 

     cursor_mc = cursor2_mc; 
     cursor1_mc.visible = false; 
     cursor2_mc.visible = true; 
     cursor3_mc.visible = false; 
    } 

    if (CanvPark_mc.SmallSelected1 == true) { 

     cursor_mc = cursor3_mc; 
     cursor1_mc.visible = false; 
     cursor2_mc.visible = false; 
     cursor3_mc.visible = true; 
    } 
    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 = stage.mouseX; 
     cursor_mc.y = stage.mouseY; 
     cursor_mc.mouseChildren = cursor_mc.mouseEnabled = false; 
     Mouse.hide(); 

    } 

} 

if块不在函数内部,所以它不会将代码关联到输出。我把它作为一个测试,它的工作。因为当你点击鼠标来改变画笔时,Movieclip会开始跟随你的鼠标。如果换成其他画笔,动画片段会留在那里。这是通过在if中切换它的可见性来解决的。 :)

它现在按预期工作。

希望这可以帮助别人!