如何在Actionscript 3.0中使用静态函数?

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向上移动了我的控制:(

dan*_*nii 6

您不需要为每个对象编写函数,因为您可以将正在侦听事件的对象称为事件的"目标",因此:

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时,您不会创建移动动画,而是将其"远程传输"到该位置.