我只是要解释一下背景,以便更清楚。
我制作了这个菜单:my menu
我希望对同一菜单进行改进和更高级的版本。
我在咖啡的表面上制作了一个波浪动画,我希望在鼠标移动时让它循环,并在不移动时停止循环。
很抱歉缺乏规格,因为我对动作脚本很新,但我希望有人能够帮助我。 :)
谢谢, 马修
答案 0 :(得分:1)
嗯,你说过 - 利用MouseEvent.MOUSE_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;
}
答案 1 :(得分:0)
取决于您希望它如何工作,我将按如下方式执行此操作:
一些示例代码将遵循:
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