【问题标题】:how to stop a rotating movieclip at different angles with other movieclips following, actionscript 3如何在不同的角度停止旋转的动画剪辑,然后跟随其他动画剪辑,动作脚本 3
【发布时间】:2012-05-31 11:26:20
【问题描述】:

我有一个压力计,它需要从最小值旋转到最大值。现在,我将压力计作为图片,将箭头作为电影剪辑。我让它以正确的速度旋转,但不知道如何在最低/最高压力下停止它。

假设是这样工作的:

我有两个影片剪辑/按钮;一种用于模拟更大的压力,一种用于模拟较小的压力。 当用户按下“更多压力”电影剪辑/按钮时,压力开始上升,压力计内的箭头开始转动。 在压力上升的同时,另一个movieclip(“stamp”)将向上推。

然后是另一个影片剪辑/按钮,“压力较小”模拟压力下降;按下时,与压力上升时箭头停止的点相同,将开始向最小值下沉,印章将再次下降。

因此,当用户按下“更多压力”时,压力会上升到最大值,并且一旦用户停止按下按钮,动画就会停止(戳记和箭头)。如果用户按下“降低压力”,箭头就会从停止的地方开始下沉。

到目前为止,这是我的代码:pil1 = 压力计箭头,戳记 = stamp,以及“压力较小”/“压力更大” = Lpress / mpress

addEventListener (Event.ENTER_FRAME, rotate);
function rotate(event:Event):void
{
  pil1.rotation = pil1.rotation+1;
}

【问题讨论】:

    标签: actionscript rotation


    【解决方案1】:

    ymutlu 是在正确的轨道上。鼠标按下事件只会在鼠标被按下时执行一次。要使对象在按下鼠标时连续旋转,您需要在每一帧上增加或减少对象的旋转。我认为以下应该可以解决问题:

    import flash.events.MouseEvent;
    import flash.events.Event;
    
    var rotate = 0;
    
    Hpress.addEventListener(MouseEvent.MOUSE_DOWN, Hpressed); 
    Hpress.addEventListener(MouseEvent.MOUSE_UP, removeEnterFrame);
    Lpress.addEventListener(MouseEvent.MOUSE_DOWN, Lpressed);
    Lpress.addEventListener(MouseEvent.MOUSE_UP, removeEnterFrame);
    
    function Hpressed(e:MouseEvent):void 
    { 
        rotate = 1; 
        addEnterFrame();
    } 
    
    function Lpressed(e:MouseEvent):void 
    { 
        rotate = -1;
        addEnterFrame();
    }
    
    function addEnterFrame():void
    {
        this.addEventListener(Event.ENTER_FRAME, update);
    }
    
    function removeEnterFrame(e:MouseEvent):void
    {
        this.removeEventListener(Event.ENTER_FRAME, update);
    }
    
    function update(e:Event):void
    {
        pil1.rotation += rotate;
    } 
    

    【讨论】:

    • 嗨!感谢您的回答:) 我尝试了代码,但是 Hpressed 和 Lpressed 函数中的“addEnterFrame”出现错误:参数数量不正确。预期 1. :)
    • 对不起,这是我的错误。试试上面的更新代码,其中我从 addEnterFrame 方法中删除了 e 参数。
    • 这看起来更好,但我仍然收到一个错误:(ArgumentError:错误#1063:testomkodevirker_fla::MainTimeline/update() 上的参数计数不匹配。预期为 0,得到 1。)你知道吗?错误?
    • 对不起那只猫,这就是为什么测试很重要! update 方法应该有我之前从 addEnterFrame 方法中删除的 e 参数。查看我(有理由)确信现在可以工作的更新代码:)
    • 现在它工作了:DDD 比你好多了!但是有一个小问题,如果我按下按钮,它会工作一秒钟左右,然后箭头停止,我必须再次单击鼠标才能使其进一步移动?帧率设置为 25。你知道吗?
    【解决方案2】:

    按住表示 max button down 或 min button down 的变量,并在 enterframe 循环中检查它。对您的评论进行了编辑答案,希望您能解决。

    addEventListener (Event.ENTER_FRAME, rotate);
    function rotate(event:Event):void
    {
       if(isMaxDown) // true when max button down
         pil1.rotation = Math.min(presMax,pil1.rotation+1);  // presMax is max value that pressure can go
       if(isMinDown) // true when min button down
         pil1.rotation = Math.max(presMin,pil1.rotation-1);// presMin is min value that pressure can go
    }
    
    // isMaxDown and isMinDown are global values.
    Hpress.addEventListener(MouseEvent.MOUSE_DOWN, Hpressed);
    Lpress.addEventListener(MouseEvent.MOUSE_DOWN, Lpressed); 
    Hpress.addEventListener(MouseEvent.MOUSE_UP, H_up);
    Lpress.addEventListener(MouseEvent.MOUSE_UP, L_up); 
    function H_up(e:MouseEvent):void {
     isMaxDown=false;
    } 
    function L_up(e:MouseEvent):void {
     isMinDown=false; 
    } 
    function Hpressed(e:MouseEvent):void {
     isMaxDown=true;
    } 
    function Lpressed(e:MouseEvent):void {
     isMinDown=true; 
    } 
    

    这段代码会对你有所帮助,但很可能这不是休闲做类似事情的途径。

    【讨论】:

    • 感谢您的回答!我的问题是当我按住按钮时,它只会移动一次。但它应该不断移动,直到我放开按钮。这是我的代码:Hpress.addEventListener(MouseEvent.MOUSE_DOWN, Hpressed); Lpress.addEventListener(MouseEvent.MOUSE_DOWN, Lpressed);函数 Hpressed(e:MouseEvent):void { pil1.rotation = pil1.rotation+1; } 函数 Lpressed(e:MouseEvent):void { pil1.rotation = pil1.rotation-1; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多