Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3中的全局鼠标移动问题_Flash_Actionscript 3 - Fatal编程技术网

Flash AS3中的全局鼠标移动问题

Flash AS3中的全局鼠标移动问题,flash,actionscript-3,Flash,Actionscript 3,我需要注册一个屏幕保护程序一样的功能鼠标移动。下面的代码工作正常,但当鼠标位于movieclip上时,不会触发鼠标移动事件,该movieclip已通过URLRequest加载了外部swf。有没有办法在不修改外部swf中的代码的情况下解决这个问题 stage.addEventListener(MouseEvent.MOUSE_MOVE,function(e){ lastMoveTime=getTimer() trace(stage.mouseX) }) 更新: 我需要在父SWF和

我需要注册一个屏幕保护程序一样的功能鼠标移动。下面的代码工作正常,但当鼠标位于movieclip上时,不会触发鼠标移动事件,该movieclip已通过URLRequest加载了外部swf。有没有办法在不修改外部swf中的代码的情况下解决这个问题

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

我需要在父SWF和子SWF中保留交互性

子swf为AS2

以下是加载AS2 swf的代码:

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

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

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

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);

这将阻止加载的swf对鼠标作出反应。但是你说的是屏保,所以我认为这没问题。

你可以重写代码,使用延迟10毫秒的计时器,而不是监听鼠标移动事件,然后监听计时器事件。 在处理程序中,检查鼠标点自上次调用以来是否已更改。 这不是一个很好的解决方案,但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);
}

谢谢您的第一个建议是否会禁用外部swf中的所有鼠标事件(单击鼠标翻转等)?谢谢@DanielB,但它实际上是一个交互式系统,在一段不活动的时间后会重置,因此我需要保留交互性。您是否正在加载AS2 swf?对于AS3阶段,应接收鼠标移动事件。您是否尝试将侦听器添加到加载程序本身?是的,它是AS2 swf。我将尝试将侦听器连接到加载程序以及stageBummer-将侦听器连接到加载程序MovieClip没有乐趣。还有其他想法吗?聪明又刻薄!我喜欢!令人惊讶的是,我可能仍然需要这样做,因为我从来没有得到该错误的修复。幸运的是,客户还没有注意到!再次感谢@Reiner