我是AS3的新手,所以请提出我的基本问题。
我想要做的是在舞台左侧有一个左箭头MC,在舞台右侧有一个右箭头MC。当鼠标位于舞台的左1/3处时,左箭头出现,在舞台的右1/3处,出现右箭头,但中间1/3的箭头淡出。
我不想制作大型隐形MC并以这种方式检测鼠标移动。我只想让它相对于舞台上的鼠标位置。
我认为这很容易,但每次鼠标移动时都会触发eventListener,因此左右箭头MC动画会不断被触发,看起来他们因为缺少一个更好的单词而“颤抖”。
到目前为止我所拥有的是以下内容。有人可以帮我一点吗?
var stagePos:int = stage.width/3;
addEventListener(MouseEvent.MOUSE_MOVE, arrowDetectHandler);
function arrowDetectHandler(e:MouseEvent) {
var mouseArrow:int = mouseX;
if (mouseArrow<stagePos) {
arrowLeft_mc.gotoAndPlay("Show");
trace ("left arrow show");
} else if (mouseArrow>stagePos && mouseArrow<stagePos*2) {
arrowLeft_mc.gotoAndPlay("Hide");
arrowRight_mc.gotoAndPlay("Hide");
trace ("nothing happens");
} else if (mouseArrow>stagePos*2) {
arrowRight_mc.gotoAndPlay("Show");
trace ("right arrow show");
}
}
答案 0 :(得分:0)
if...else
似乎没问题。唯一可能导致问题的是mc.gotoAndPlay
。请尝试使用alpha属性:
var stagePos:int = stage.width/3;
addEventListener(MouseEvent.MOUSE_MOVE, arrowDetectHandler);
function arrowDetectHandler(e:MouseEvent) {
var mouseArrow:int = mouseX;
if (mouseArrow<stagePos) {
arrowLeft_mc.alpha = 1; //alpha is 1, arrow is shown
trace ("left arrow show");
} else if (mouseArrow>stagePos && mouseArrow<stagePos*2) {
arrowLeft_mc.alpha = 0; //alpha is 0, arrow is hidden
arrowRight_mc.alpha = 0;
trace ("nothing happens");
} else if (mouseArrow>stagePos*2) {
arrowRight_mc.alpha = 1;
trace ("right arrow show");
}
}
答案 1 :(得分:0)
问题在于重复调用代码的速度。
如果您正在倾听MouseEvent.MOUSE_MOVE
,那么任何'gotoAndPlay'业务都会以太快的速度完成。
由于您不想使用不可见的MovieClip(它为您提供非常方便的MouseEvent.ROLL_OVER
和MouseEvent.ROLL_OUT
事件),因此您将继续轮询以评估代码中的坐标。< / p>
您需要记住代码提供的最后一个“答案”,然后忽略下次已经存在的情况。你必须忍受我对switch语句的偏好。
var stagePos:int = stage.width/3;
var _arrowShowing : int = 0;
addEventListener(MouseEvent.MOUSE_MOVE, arrowDetectHandler);
function arrowDetectHandler(e:MouseEvent)
{
var mouseArrow:int = mouseX;
switch( true )
{
case ( !_arrowShowing == 1 && mouseArrow < stagePos ) :
_arrowShowing = 1;
arrowLeft_mc.gotoAndPlay("Show");
trace ("left arrow show");
break;
case ( !_arrowShowing == 0 && mouseArrow > stagePos && mouseArrow < stagePos * 2 ) :
_arrowShowing = 0;
arrowLeft_mc.gotoAndPlay("Hide");
arrowRight_mc.gotoAndPlay("Hide");
trace ("nothing happens");
break;
case ( !_arrowShowing == 2 && mouseArrow>stagePos*2 ) :
_arrowShowing = 2;
arrowRight_mc.gotoAndPlay("Show");
trace ("right arrow show");
break;
}
}