2011-01-26 61 views
1

今天早上我偶然发现了这个问题:虚拟鼠标悬停AS3

当悬停一个按钮,是否可以在X秒后自动点击它?那么用户不需要用鼠标点击它?

我该如何让Flash相信我的鼠标确实点击了舞台上的某个按钮或者带有as3?

我的电影中有很多按钮。所以我更喜欢使用一些代码来覆盖我电影中所有现有或即将上市的按钮的功能。

我通常会使用这样的代码,但有一些解决方法来以不同的方式完成此操作吗?我不想向每个按钮添加代码。

this.addEventListener(MouseEvent.OVER, onMouseClickEvent); 

public function onMouseClickEvent(event:Event) 
{ 
trace(event); 
if(event.buttonDown) // if button goes down normally 
trace("MOUSE CLICKED NORMALLY"); 
else 
trace("left button was not down"); 
} 

回答

2

我认为最简单的方法就是子类化Button。 就应该添加鼠标输入/输出监听器,添加点击监听器,看起来像 :public function clickListener(event:MouseEvent = null){...}

当鼠标悬停时,提出一个标志,鼠标在对象上,启动一个定时器,当计时器回调函数被调用,你检查是否标志(你把标志放下,当鼠标不在时)是真的,只需调用clickListener()

1

倾听MouseEvent.MOUSE_OVER和启动一个定时器,在其末端的按钮将发送MouseEvent.CLICK事件。在鼠标悬停处理程序中,使用SystemManager为MouseEvent.MOUSE_OUT添加一个侦听器,取消定时器。定时器也使用SystemManager删除侦听器。那么点击按钮。

+0

我理解的计时器。但是这样我必须为每个按钮设置它。我想找到一个涵盖所有按钮的解决方案..任何想法? – Proto 2011-01-26 21:45:07

0

最后!解决了!

这奏效了:

公共职能的RunOnce(事件:TimerEvent):无效{ btnSignal.dispatch( “键盘”,btnCode); }

Robusto & Radoslav Georgiev:谢谢你指点正确的方向!

0

(我正在回答这个有点晚,但想为未来的人提供意见)。

'皮肤这只猫'的一种方法是让你的悬停事件触发一个计时器(即3秒)。在EnterFrame或其他函数中,当达到3秒时,让数字或布尔变化。

//Pseudo code 

    if(timer == 3) 
{ numberVar = 1; 
//or 
BooleanVar = True; 
} 
else 
{ 
numberVar = 0; 
//or 
BooleanVar = false; 
} 
//end 

然后就像你连你的方法的MouseEvent,连接这些同样的方法火的时候,numberVar == 1或BooleanVar ==真。而已。

为了超级简单和可读性,让您的MouseClickEvent仅为numberVar = 1或BooleanVar = True。

随着时间的推移,这些变得非常简单,而且根据我的经验,'非常'是错误证明。在打字错误或其他情况下也可以很容易地修复。没有超级难以捉摸的进口。希望有所帮助。顺便说一下(+ 1)

大问题:d