我正在为游戏制作一个gui API,一个请求的功能是震动事件。基本上是一个非常类似于Windows 7的Aero Shake的事件。当鼠标按下时,如果它快速地单向来回移动,则会触发该事件。我只是不确定什么类型的psedocode会进入这个?
答案 0 :(得分:9)
我可能会考虑这样的事情:
答案 1 :(得分:6)
您需要计算鼠标移动的变化。如果鼠标在小于0.7秒的时间内改变方向超过3次,那么它就是震动。要始终检测方向轨迹的变化,最后5个鼠标坐标。如果P0点是最后一个,P5是倒数第五个,则计算P0-P3和P3-P5之间的角度。如果角度为5度,则鼠标改变方向。
答案 2 :(得分:3)
一般的想法是这样的:
关闭鼠标:
(x0, y0)
。slope = 0
。start time = current time
。鼠标移动:
(x, y)
。newSlope = abs((y - y0) / (x - x0))
。 (这表示鼠标相对于起始位置的移动方向)abs(newSlope - slope) < some threshold
,则用户仍然朝同一方向移动:然后检查是否current time - start time > shake time
,如果是,则触发摇动事件并重置start time
。slope = newSlope
并重置start time = current time
。答案 3 :(得分:0)
我发现更优雅,更重要的是答案。跟踪最后N个(比如20个)鼠标位置。这些位置由矩形界定,其顶部最小(P(N).top),底部=最大(P(N).bottom)等。计算鼠标在最后N次移动的总距离。如果行进的总距离比那个矩形的周长大K倍,那么它就是震动。