Это то, что я никогда не мог понять.
У вас есть кнопка за кадром, которую вы хотите анимировать. Мы назовем ее «btn».
У вас есть область попадания, которая служит датчиком приближения для запуска анимации btn. Мы назовем его «hitZone» (чтобы не вызывать путаницу со свойством hitArea экранных объектов).
![btn is off stage and hitZone is the white box with the blue border](https://i.stack.imgur.com/C1wv7.png)
И btn, и hitZone являются мувиклипами. Слушатели идут примерно так.
import com.greensock.*;
import com.greensock.easing.*;
import flash.events.MouseEvent;
var endPoint:Number = 31;
hitZone.addEventListener(MouseEvent.ROLL_OVER, onHitZoneOver);
hitZone.addEventListener(MouseEvent.ROLL_OUT, onHitZoneOut);
hitZone.addEventListener(MouseEvent.CLICK, onHitZoneClick);
btn.addEventListener(MouseEvent.ROLL_OVER, onBtnOver);
btn.addEventListener(MouseEvent.ROLL_OUT, onBtnOut);
btn.addEventListener(MouseEvent.CLICK, onBtnClick);
btn.mouseChildren = false;
function onHitZoneOver(e:MouseEvent):void
{
TweenLite.to(btn, 0.75, {x:endPoint, ease:Expo.easeOut});
trace("over hitZone");
}
function onHitZoneOut(e:MouseEvent):void
{
TweenLite.to(btn, 0.75, {x:-1, ease:Expo.easeOut});
trace("out hitZone");
}
function onBtnOver(e:MouseEvent):void
{
hitZone.mouseEnabled = false;
hitZone.removeEventListener(MouseEvent.ROLL_OVER, onHitZoneOver);
hitZone.removeEventListener(MouseEvent.ROLL_OUT, onHitZoneOut);
trace("over BTN");
// This line is the only thing keeping the btn animation from being fired continuously
// causing jumpiness. However, calling this allows the animation to be interrupted
// at any point.
TweenLite.killTweensOf(btn);
}
function onBtnOut(e:MouseEvent):void
{
hitZone.mouseEnabled = true;
hitZone.addEventListener(MouseEvent.ROLL_OVER, onHitZoneOver);
hitZone.addEventListener(MouseEvent.ROLL_OUT, onHitZoneOut);
trace("out BTN");
}
function onBtnClick(e:MouseEvent):void
{
trace("click BTN");
}
function onHitZoneClick(e:MouseEvent):void
{
trace("click hitZone");
}
Проблема в том, что ваша мышь находится над хитзоной и btn. Кнопка непрерывно перемещается, если только вы не вызываете TweenLite.killAllTweensOf (). Это устраняет нервозность, но создает новую проблему. Теперь очень просто прервать анимацию btn в любой момент, остановив ее до того, как она будет полностью видна на сцене.
Я видел похожих сообщений, но даже они страдают от той же проблемы. Возможно, это проблема с тем, как Flash распознает края, потому что я никогда не видел обходного пути для этого.