0

我正在制作一个应用程序/程序,允许您通过单击 UI 上的按钮来设计具有两个基本功能的自己的艺术作品,我们现在称之为“模式”。

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

分配它。我想要它,以便当旋转模式或镊子模式处于活动状态时,另一个被禁用(启用 = 假)或达到这种效果。我已经到了一个岔路口,我需要在方法轮换或方法镊子下将它们分组。当单击镊子时,您可以(仅)移动东西,并且选择旋转模式时,您可以旋转电影剪辑...(仅)它可以正常工作,直到您从旋转模式退回旋转模式后,您仍然可以旋转电影剪辑!任何人都可以对此有所了解,所以当我离开此模式时,您仍然可以旋转它吗?任何人都可以建议组织这种功能的最佳方式吗?

感谢您的帮助 - 我是 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; 
    }
}
4

1 回答 1

0

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

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

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

警告:如果尚未创建事件侦听器,我无法正确回忆这是否会引发错误。如果是这样,您可以使用 Try/Catch 或链接到指示用户处于何种模式的变量的 if 语句来解决此问题。


您可能还需要重新排列代码。我不建议使用影响舞台的嵌套函数,因为它们会让生活变得有点困难。分别定义函数,然后从您想要的函数中调用其他函数。

请记住,ActionScript 是面向对象的,而不是过程式的(并且不是严格自顶向下的)。我不确定你是否来自另一种语言,但我知道这对我来说需要很多时间来适应,来自程序自上而下的技术。

错误的

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

正确的

function myFunction1()
{
   myFunction2();
}

function myFunction2()
{
   //foobar
}
于 2014-01-08T16:37:12.470 回答