yee*_*een 3 flash actionscript actionscript-3 flash-cs4
我想做以下事情:有一些物体(例如20个物体),每当我将鼠标移到其中任何一个物体上时,它会向上移动,每当我的鼠标离开时,它就会向下移动.
obj1.addEventListener(MouseEvent.MOUSE_OVER, moveMyself1);
obj1.addEventListener(MouseEvent.MOUSE_OUT, moveMyself2);
obj2.addEventListener(MouseEvent.MOUSE_OVER, moveMyself1);
obj2.addEventListener(MouseEvent.MOUSE_OUT, moveMyself2);
obj3.addEventListener(MouseEvent.MOUSE_OVER, moveMyself1);
obj3.addEventListener(MouseEvent.MOUSE_OUT, moveMyself2);
obj4.addEventListener(MouseEvent.MOUSE_OVER, moveMyself1);
obj4.addEventListener(MouseEvent.MOUSE_OUT, moveMyself2);
obj5.addEventListener(MouseEvent.MOUSE_OVER, moveMyself1);
obj5.addEventListener(MouseEvent.MOUSE_OUT, moveMyself2);
//and etc...
function moveMyself1(e:MouseEvent):void{
obj1.y -= 30;
}
function moveMyself2(e:MouseEvent):void{
obj1.y += 30;
}
Run Code Online (Sandbox Code Playgroud)
我不想为每个对象添加一个事件监听器,那么我将有40个方法!有没有办法编写静态方法,所以我可以用于所有对象?
我意识到obj正在上下移动太快.如果你试图将你的鼠标放在obj的底端,你会看到它快速向下跳跃.有什么方法可以控制obj的速度吗?
哈哈,我希望有一些用户可以将鼠标悬停在下面并发现宝藏的物体.用户也可以点击宝藏.我从游戏中得到了这个想法.用户将鼠标移开后,对象将落到同一位置.如果obj移动得那么快,用户就无法点击里面的宝藏.关于如何解决运动问题的任何想法?
- - - - - - - - - - - - - - - - 更新 - - - - - - - - - ---------------
var elements : Array = new Array();
var elements2 : Array = new Array();
for (var i:int = 1; i <= 5; i++) {
elements[i] = this['obj' + i];
elements2[i] = this['tracking' + i];
}
for each(var element_1 : IEventDispatcher in elements){
element_1.addEventListener(MouseEvent.MOUSE_OVER, moveUp);
}
for each(var element_2 : IEventDispatcher in elements2){
element_2.addEventListener(MouseEvent.MOUSE_OUT, moveDown);
}
function moveUp(e:MouseEvent):void{
e.currentTarget.y -= 30;
}
function moveDown(e:MouseEvent):void{
elements[elements2.indexOf(e.currentTarget)].y += 30;
}
Run Code Online (Sandbox Code Playgroud)
上面是我的更新代码,我尝试了理查德的建议,但似乎objs r向上移动了我的控制:(
您不需要为每个对象编写函数,因为您可以将正在侦听事件的对象称为事件的"目标",因此:
function moveUp(e:MouseEvent):void
{
e.currentTarget.y -= 30;
}
function moveDown(e:MouseEvent):void
{
e.currentTarget.y += 30;
}
Run Code Online (Sandbox Code Playgroud)
此外,您看到对象快速上下移动的原因是因为当您更改对象的位置时,鼠标停止在对象内部以便MOUSE_OUT事件触发,然后您再次将对象的位置更改为鼠标所在的位置以及MOUSE_OVER事件火灾等.跟踪将是:
对象位于y = 5(例如).将鼠标移动(鼠标位于y = 5).MOUSE_OVER事件触发 - >对象向上移动(y = 35) - > MOUSE_OUT事件触发 - >对象向下移动(y = 5) - >因为鼠标仍在y = 5,MOUSE_OVER事件触发 - >冲洗并重复.
请记住,当您设置对象的y时,您不会创建移动动画,而是将其"远程传输"到该位置.