Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3-在flash工具模式下拖动和旋转的工具_Actionscript 3_Flash_Drag And Drop_Mouseevent_Rotateanimation - Fatal编程技术网

Actionscript 3 AS3-在flash工具模式下拖动和旋转的工具

Actionscript 3 AS3-在flash工具模式下拖动和旋转的工具,actionscript-3,flash,drag-and-drop,mouseevent,rotateanimation,Actionscript 3,Flash,Drag And Drop,Mouseevent,Rotateanimation,我正在制作一个应用程序/程序,通过点击用户界面上的按钮,你可以用两个基本功能设计自己的艺术作品,我们现在称之为“模式” 镊子模式:您可以在此模式下拖动选定的对象集。 旋转模式:这允许您在舞台上旋转一组特定的电影剪辑 分配它。 我希望这样,当旋转模式或镊子模式处于活动状态时,另一个处于非托管状态(enabled=false)或达到此效果。我已经到达一个岔路口,在那里我需要将它们分组在方法旋转或方法镊子下。当点击镊子时,你移动东西(仅),当选择旋转模式时,你可以旋转电影剪辑…(仅)这工作正常,直到你

我正在制作一个应用程序/程序,通过点击用户界面上的按钮,你可以用两个基本功能设计自己的艺术作品,我们现在称之为“模式”

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

分配它。 我希望这样,当旋转模式或镊子模式处于活动状态时,另一个处于非托管状态(enabled=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; 
    }
}

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

在spinmode()函数的顶部,添加一行
stage.removeEventListener(MouseEvent.MOUSE_-MOVE,镊子)

在tweezer()函数的顶部,添加一行
stage.removeEventListener(MouseEvent.MOUSE\u MOVE,followspin)

警告:如果尚未创建事件侦听器,我想不起来这是否会引发错误。如果是这样的话,您可以使用Try/Catch或If语句绕过这个问题,该语句链接到一个变量,该变量指示用户处于何种模式


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

请记住,ActionScript是面向对象的,不是过程的(也不是严格意义上的自顶向下)。我不确定你是否来自另一种语言,但我知道我花了很多时间才习惯,这是一种自上而下的程序技巧


你好,谢谢你的指点。我有一种感觉,一种直觉!有了嵌套功能,这会给我带来更多麻烦。我需要在舞台上放置大约20件物品。这就是为什么我想我会来到这里,作为像你这样对AS3比我更了解的人——我对它还是新手,它与AS2有很大的不同。谢谢杰森,接下来几天我会有一个修补匠。:-)如果可以的话,去看看ActionScript3.0圣经。AS3有许多时髦的新功能,这些功能将派上用场。可以说,它已经发展成为一种成熟的OOP语言。
function myFunction1()
{
   function myFunction 2()
   {
      //foobar
   }
}
function myFunction1()
{
   myFunction2();
}

function myFunction2()
{
   //foobar
}