我需要为屏幕保护程序注册鼠标移动功能。下面的代码工作正常,但是当鼠标位于使用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);
答案 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);
}