0

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

Stage.mouseLock当我使用属性进入全屏模式enabled并使用鼠标进行非常缓慢的移动时,确定鼠标位置的两个属性 (MouseEvent.movementXMouseEvent.movementY) 返回零 (0)。

事件的打印event.toString()返回:

 [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]

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

这很奇怪,因为当鼠标移动时事件被正确触发(也有缓慢的移动),但返回的移动为 0。似乎移动 < 1 但只报告整数移动,所以值总是返回 0。

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

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

谢谢你的任何建议。


笔记:

经过更好的测试后,我发现 Flash 播放器(我的 Flash 播放器版本是 11,7,700,203)有一个看起来像错误的行为:如果当前鼠标移动 (movementXmovementY) 等于之前的移动,而不是 Flash 返回movementX=0movementY=0。下一次鼠标移动将是正确的值,因为它不为零。

正因为如此,在始终沿同一方向进行恒定运动(非常缓慢的运动更容易重现)的情况下,玩家每触发两个事件就会显示“零值”。

在此链接中,您可以测试一个工作示例(比自己编写一个示例更快)。

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

在这个其他链接(感谢@nemostein)有另一个工作示例。

我试图更好地解释我:如果您非常缓慢地移动光标(即向正确的方向),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:0,y:0)并且在我看来,每次当您进行运动等于(x 和 y)与您之前的运动相等时,都会返回此值。

我希望这是可以理解的。

4

2 回答 2

0

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

于 2013-06-07T17:13:54.677 回答
0

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

您正在寻找的精度(例如:)movementX == 0.75无法实现。

我无法重现您在注释中描述的行为(“当前鼠标移动等于之前的移动”),这是and的一个工作示例Stage.mouseLock = trueStage.displayState = StageDisplayState.FULL_SCREEN

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

于 2013-06-03T05:18:30.833 回答