0

我正在制作应用程序/程序,通过单击UI上的按钮,您可以使用两个基本功能设计自己的艺术作品,我们将称之为“模式'现在。AS3 - 在Flash中拖动和旋转的工具工具模式

镊子模式:您可以在此模式下拖动选定的一组对象。 旋转模式:这允许您旋转舞台上的一组特定电影剪辑。

分配它。 我希望它能够在旋转模式或镊子模式处于活动状态时另一个被禁用(启用= false)或达到此效果。我已经到达了我需要在方法旋转或方法镊子下进行分组的道路上的叉子。当点击镊子时,你移动的东西(仅),当选择旋转模式时,你可以旋转电影剪辑...(只)这工作正常,直到你离开旋转模式后镊子,你仍然可以旋转电影剪辑!任何人都可以对此有所了解,所以当我离开这种模式时,你仍然可以旋转它?任何可以提出组织这种功能的最佳方式吗?

感谢您的帮助 - 我是AS3新手。

// UI btns TOOLS --------------------- 

spinny_mc.addEventListener(Event.ENTER_FRAME, fl_RotateContinuously); 

function fl_RotateContinuously(event:Event) 
{ 
    spinny_mc.rotation += 20; 
} 

rotate_btn.visible = true; 
tweezer_btn.visible = false; 

//----- rotate tool 

rotate_btn.addEventListener(MouseEvent.CLICK, spinmode); 

function spinmode(event:MouseEvent):void 
{ 
    Mouse.hide(); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE,followspin); 
    function followspin(evt:MouseEvent) 
    { 
    spinny_mc.x = mouseX; 
    spinny_mc.y = mouseY; 
    rotate_btn.visible = false; 
    tweezer_cur.visible = false; 
    tweezer_btn.visible = true; 
    rotate_btn.enabled = true; 
    tweezer_btn.enabled = false;   
    skullface_mc.addEventListener(MouseEvent.CLICK, turnerbone); 

     function turnerbone(event:MouseEvent):void 
     { 
      skullface_mc.rotation+=45; 
     } 
    } 
} 

// ------------------------ tweeze tool 
Mouse.hide(); 
stage.addEventListener(MouseEvent.MOUSE_MOVE,follow); 
function follow(evt:MouseEvent){ 
    tweezer_cur.x = mouseX; 
    tweezer_cur.y = mouseY; 
} 

tweezer_btn.addEventListener(MouseEvent.CLICK, tweezer); 

function tweezer(event:MouseEvent):void 
{ 
    Mouse.hide(); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE,tweezer); 
    function tweezer(evt:MouseEvent){ 
     tweezer_cur.x = mouseX; 
     tweezer_cur.y = mouseY; 
     rotate_btn.visible = true; 
     tweezer_cur.visible = true; 
     tweezer_btn.visible = false; 
     spinny_mc.visible = false; 
     rotate_btn.enabled = false; 
     tweezer_btn.enabled = true; 
    } 
} 

回答

0

问题归结为您的事件侦听器。离开函数后它们不会消失,因为它们实质上是对象本身。您需要手动执行此操作。

在spinmode()函数的顶部,添加行 stage.removeEventListener(MouseEvent.MOUSE_MOVE,tweezer);

在镊子()函数的顶部,添加行 stage.removeEventListener(MouseEvent.MOUSE_MOVE,followspin);

警告:我不能正确地记得,如果这如果事件侦听器尚未创建,则会引发错误。如果是这样,你可以得到周围使用try/catch语句,或者if语句链接到一个变量,表示用户处于何种模式。


您可能还需要重新安排你的代码位。我不建议影响舞台的嵌套功能,因为它们会使生活变得困难。分别定义函数,然后从所需的函数中调用其他函数。请记住,ActionScript是面向对象的,而不是程序性的(而不是严格的自上而下)。我不确定你是否来自另一种语言,但我知道,从程序自上而下的技术中,我花了很多时间适应我。

WRONG

function myFunction1() 
{ 
    function myFunction 2() 
    { 
     //foobar 
    } 
} 

RIGHT

function myFunction1() 
{ 
    myFunction2(); 
} 

function myFunction2() 
{ 
    //foobar 
} 
+0

您好,感谢您的指针。我得到了一种感觉,一种直觉!有了嵌套功能,它会让我更加烦恼,我需要在舞台上使用大约20个物体。这就是为什么我认为我会来到这里,作为像我这样比我更了解AS3的人 - 我还是新手,和AS2有很大不同。谢谢杰森,我会在接下来的几天里修补一下。 :-) – user3082874

+0

如果可以,请开始使用ActionScript 3.0 Bible。 AS3有很多时髦的新功能,可以派上用场。可以说,它已经成为全面的面向对象语言。 http://www.amazon.com/ActionScript-3-0-Bible-Roger-Braunstein/dp/0470135603 – CodeMouse92