as3:全屏模式下的mouse_move事件和鼠标慢速移动时的mouseLock

时间:2013-06-02 20:50:10

标签: actionscript-3 locking mouse fullscreen mousemove

对于flash和AS3,在全屏模式下鼠标移动事件似乎存在问题,并且mouseLock已激活,我不明白如何解决。

当我使用Stage.mouseLock属性enabled进入全屏模式时,我使用鼠标进行非常慢的移动,这两个属性用于确定鼠标的位置(MouseEvent.movementX和{ {1}})返回零(0)。

事件MouseEvent.movementY的打印件返回:

event.toString()

“如果鼠标移动得非常慢,鼠标可以移动到我想要的总是返回0表示x和y,因此无法确定鼠标的移动。” (*)经过更好的测试后,我在“注释”中添加了对这句话的更正。

这很奇怪,因为当鼠标移动时(也有慢速移动)事件被正确触发,但是返回的移动是0.看起来像移动是< 1但仅报告整数移动,因此值始终返回0.

我也尝试过更改操作系统(Mac OSX)的鼠标设置但没有成功。

如果您愿意,我可以提供示例代码以进入全屏模式并激活Stage.mouseLock属性。

感谢您的任何建议。


注意:

经过更好的测试后我发现flash播放器(我的flash播放器版本是11,7,700,203)的行为看起来像一个bug:如果当前的鼠标移动( [MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=2 localX=0 localY=0 stageX=0 stageY=0 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0] movementX)与闪回返回movementYmovementX=0相等。下一次鼠标移动将是正确的值,因为它将与零不同。

正因为如此,持续不断的移动始终在同一方向(移动速度非常慢,更容易重现),玩家每两个事件都会显示“零值”。

At this link你可以测试一个工作示例(比代码自己更快一个例子)。

如果我发现的行为是正确的,那么很容易修改代码来纠正这个问题,无论如何恕我直言,它仍然是一个错误。我会把它报告给adobe。

At this other link(感谢@nemostein)还有另一个工作示例。

我试着更好地解释一下:如果你将光标移动得非常慢(即向右移动),当你移动光标足够时,你会收到输出movementY=0。如果再次向右移动光标,则会收到输出Movement( X:1 Y:0 )。如果您重复微动,您将始终使用此模式接收动作报告:Movement( X:0 Y:0 )而不是(x:1,y:0),(x:0,y:0),(x:1,y:0),(x:0,y:0)...

我认为收到像(x:1,y:0),(x:1,y:0),(x:1,y:0)...这样的动作是错误的,而且在我看来,每当你做一个动作等于(x和y)到你之前的动作时,就会返回这些值。

我希望这是可以理解的。

2 个答案:

答案 0 :(得分:0)

没有错误,但MouseEvent.movementX/Y(与MouseEvent.localX/YMouseEvent.stageX/Y一起)有点误导...... 虽然它们是Number,而不是int s,但没有像“半像素”这样的东西,所以它们总是报告int值。

无法实现您所寻求的精确度(例如:movementX == 0.75)。

我无法重现您在说明中描述的行为(“当前鼠标移动等于上一个”)和Stage.mouseLock = true以及Stage.displayState = StageDisplayState.FULL_SCREEN的{​​{3}}。

请注意,如果您非常缓慢地移动光标,最终会收到MouseEvent.movementX/Y == 1(当您移动光标时)。

答案 1 :(得分:0)

我在adobe论坛上问过,他们告诉我要打开一个bug。 这是链接:https://bugbase.adobe.com/index.cfm?event=bug&id=3575123