Actionscript 鼠标移动时激活循环

Actionscript 鼠标移动时激活循环,actionscript,loops,menu,mouse,move,Actionscript,Loops,Menu,Mouse,Move,我只想解释一下上下文,这样就更清楚了 我做了这个菜单: 我正在寻找一个改进和更先进的版本相同的菜单 我制作了咖啡表面波浪的动画,希望在鼠标移动时使其循环,在鼠标不移动时停止循环 很抱歉缺少规范,因为我对actionscript很陌生,但我希望有人能帮助我。:) 谢谢, Mathieu好吧,你说过了-利用MouseEvent.MOUSE\u MOVE在循环例程中设置一个条件 private var _isMoving:Boolean = false; stage.addEvent

我只想解释一下上下文,这样就更清楚了

我做了这个菜单:

我正在寻找一个改进和更先进的版本相同的菜单

我制作了咖啡表面波浪的动画,希望在鼠标移动时使其循环,在鼠标不移动时停止循环

很抱歉缺少规范,因为我对actionscript很陌生,但我希望有人能帮助我。:)

谢谢,
Mathieu

好吧,你说过了-利用MouseEvent.MOUSE\u MOVE在循环例程中设置一个条件

    private var _isMoving:Boolean = false;

    stage.addEventListener(MouseEvent.MOUSE_MOVE, checkMouse);
    this.addEventListener(Event.ENTER_FRAME, doLoop);

    private function checkMouse(e:MouseEvent):void 
    {
        _isMoving = true;
    }
    private function doLoop(e:Event):void 
    {
        trace("moving =" + _isMoving);

         if(_isMoving)
         {
           // loop animation
         }

        _isMoving = false;
    }

根据您希望它如何工作,我将按如下方式进行:

  • 创建波浪咖啡的动画
  • 确保动画循环
    • 请注意,默认情况下剪辑是循环的,因此您所要做的就是匹配第一帧和最后一帧!
  • 将剪辑放在当前咖啡图案的边缘
    • 双击图形进行编辑
    • 将循环动画的实例从库拖动到图形的“边”上
    • 或者用一个循环的动画图形替换整个浅棕色图形
  • 当鼠标移动时,调用播放动画循环剪辑
  • 当鼠标停止时,调用动画循环剪辑上的“停止” 一些示例代码大致如下:

        public function init():void {
            menuClip.addEventListener(MouseEvent.MOUSE_OVER, onMenuRollOver);
            menuClip.addEventListener(MouseEvent.MOUSE_OUT, onMenuRollOut);
        }
    
        public function onMenuRollOver(event:MouseEvent):void {
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
            /* do the stuff you're currently doing to animate the clip here.
            something like: coffee graphic height = ease to mouseHeight */
    
        }
    
        public function onMenuRollOut(event:MouseEvent):void {
            /* do the stuff you're currently doing to stop the clip here. */
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
            coffeeClip.stop();
        }
    
        public function onMove(event:MouseEvent):void {
            resetTimer();
            coffeeClip.play(); //note: play has no effect when movie is playing (that's ideal in this case)
        }
    
        public function resetTimer():void {
            if(mouseMovementTimer == null) createTimer();
            mouseMovementTimer.reset();
            mouseMovementTimer.start();
        }
    
        public function createTimer():Timer {
            mouseMovementTimer = new Timer(DELAY, 1); //fiddle with the delay variable. Try 500, at first
            mouseMovementTimer.addEventListener(TimerEvent.TIMER, stopAnimationLoop);
        }
    
        public function stopAnimationLoop(event:TimerEvent):void {
            mouseMovementTimer.removeEventListener(TimerEvent.TIMER, stopAnimationLoop); //optional but recommended
            mouseMovementTimer = null;
            coffeClip.stop();
        }
    
    当然,您需要执行一些操作,如调用
    init()
    和导入
    flash.utils.Timer
    ,以及初始化mouseMovementTimer、menuClip、coffeeClip和DELAY等变量

    警告:此代码在我的脑海中消失,未经测试。因此,其中可能存在一些小错误,但您应该了解总体思路:

    • 当用户将鼠标移到菜单上时,添加鼠标侦听器
    • 如果用户将鼠标移出菜单,请删除该侦听器
    • 让那个听众播放循环播放的电影剪辑
    • 触发一个事件,该事件将在一段时间内未检测到移动时停止循环剪辑
    • 一旦触发,停止剪辑
    关键在于检测鼠标何时停止移动。Flash可以很好地检测交互,但由于明显的原因,无法检测到非交互。解决这个问题的一个简单方法是触发一个计时器,一旦上次活动过多时间,计时器就会自动关闭。然后,当计时器触发时,您知道操作已停止

    我认为这是解决你问题的关键。我希望这能在某种程度上帮助别人


    ~gmale

    你说的循环是什么意思?反复播放动画或让动画在连续运动中上下移动?你需要考虑一个轻松的停止和开始点-但这可能是其核心。。。