AS3中的Global MouseMove问题

时间:2011-05-02 14:30:02

标签: flash actionscript-3

我需要为屏幕保护程序注册鼠标移动功能。下面的代码工作正常,但是当鼠标位于使用URLRequest将外部swf加载到其中的动画片段上时,不会触发鼠标移动事件。如果不修改外部swf中的代码,有没有办法解决这个问题?

stage.addEventListener(MouseEvent.MOUSE_MOVE,function(e){
    lastMoveTime=getTimer()
    trace(stage.mouseX)
})

更新:

我需要在父swf和子swfs中保留交互性。

儿童swf是AS2。

以下是加载AS2 swf的代码:

var sendPane = new Loader(); 
var url:URLRequest = new URLRequest("info.swf"); 
sendPane.load(url); 
addChild(sendPane);

2 个答案:

答案 0 :(得分:1)

将加载容器设置为loader.mouseChildren = false;loader.mouseEnabled = false;

或者您可以使用sprite.alpha = 0在舞台上添加一个Sprite或Movieclip,并将其绘制为与舞台一样大。然后将鼠标监听器添加到此Sprite。

var s:Sprite = new Sprite();
s.graphics.beginFill(0, 0);
s.graphics.drawRectangle(0, 0, stage.stageWidth, stage.stageHeight);
s.endFill();
s.addEventListener(MouseEvent.MOUSE_MOVE, listener);

addChild(s);

Booth版本可以阻止加载的swf对鼠标做出反应。但你说屏幕保护程序,所以我认为这没关系。

答案 1 :(得分:0)

您可以重写代码以使用延迟为10毫秒的Timer并监听TIMER事件,而不是侦听MOUSE_MOVE事件。 在处理程序中检查自上次调用后mousepos是否已更改。 这不是一个非常好的解决方案,但AS3和AS2电影的结合使它成为必要。

var lastPos:Point = new Point(stage.mouseX, stage.mouseY);
var lastMoveTime:int;
var timer:Timer = new Timer(10, 0);
timer.addEventListener(TimerEvent.TIMER, handleTimer);
timer.start();

private function handleTimer(e:TimerEvent):void
{
    if (lastPos.x!=stage.mouseX || lastPos.y!=stage.mouseY) lastMoveTime = getTimer();
    lastPos = new Point(stage.mouseX, stage.mouseY);
}