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

标签 flash actionscript-3 actionscript 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;
}

我不想为每个对象添加一个事件监听器,那么我会有 40 个方法!有什么方法可以编写静态方法,以便我可以用于所有对象?

我意识到 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;
}

以上是我更新后的代码,我尝试了 Richard 的建议,但似乎对象上下移动超出了我的控制范围。

最佳答案

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

function moveUp(e:MouseEvent):void
{
    e.currentTarget.y -= 30;
}

function moveDown(e:MouseEvent):void
{
    e.currentTarget.y += 30;
}

另外,您看到对象上下移动非常快的原因是,当您更改对象的位置时,鼠标停止在对象内部,因此触发 MOUSE_OUT 事件,然后您再次将对象的位置更改为鼠标所在的位置, MOUSE_OVER 事件触发等等。跟踪将是:

对象位于 y=5(例如)。您将鼠标移到上方(鼠标位于 y=5 处)。 MOUSE_OVER 事件触发 -> 对象向上移动 (y=35) -> MOUSE_OUT 事件触发 -> 对象向下移动 (y=5) -> 因为鼠标仍在 y=5,所以 MOUSE_OVER 事件触发 -> 冲洗&重复。

请记住,当您设置对象的 y 时,您不是在创建移动动画,而是将其“远程传输”到该位置。

关于flash - 如何在 Actionscript 3.0 中使用静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905706/

相关文章:

actionscript-3 - Flash/Flash Builder 中的图像限制?

flash - crossdomain.xml 有什么意义?

actionscript-3 - 使用 navigateToURL (AS3) 从 Flash 打开 URL

actionscript-3 - 从 ActionScript 3.0 中的 YouTube API 获取播放视频的 "Time Elapsed"

actionscript - 创建较深的颜色

javascript - 如何将对象数组从actionscript传递到javascript

flash - 对 TextField 中 htmlText 的影响

ios - 如何在 Flash CS6 上同时定位 iPhone 和 iPad 分辨率

android - Android 版 Adob​​e AIR (Flex 4.6.0) 中前置摄像头、视频和视频显示的显示错误

flash - ActionScript 3.0加载和播放多种声音