【发布时间】:2015-10-26 21:30:41
【问题描述】:
我目前正在构建一个测试游戏,我可以在其中尝试创建游戏中发生的某些效果,例如当用户更改设置中的值时更改鼠标灵敏度。首先,让我澄清一下,所有这些都是在 Java 中使用 Slick2D 和 lwjgl 完成的。
现在已经不碍事了,我需要告诉你我的鼠标在屏幕上的显示方式。由于我将玩弄鼠标移动,我决定在我的 init{} 方法中使用 Mouse.setGrabbed(true); 隐藏本机鼠标,从网络上抓取一个 32x32 的光标图像,并将光标图像 x/y 坐标与本机绑定鼠标坐标,因此它现在显示为本机鼠标。这是如何完成的:
int xpos = Math.max(Math.min(Mouse.getX(), 945), 4);
int ypos = Math.max(Math.min(Mouse.getY(), 572), 23);
这一切都只是意味着4< xpos< 945 和23< ypos<572 所以光标停留在我的窗口范围内(不是真正重要的信息,但我决定包含它)。
让我们来解决问题。在鼠标的“默认”状态下,它与上述本地鼠标的坐标相关联。所以光标是这样渲染的:
cursor.draw(xpos, 640 - ypos);
(需要640 - ypos,因为鼠标坐标是从左下角开始的)现在,当用户进入游戏设置并将鼠标灵敏度更改为更高,例如比通常速度高8倍时,我像这样渲染光标坐标(只有x灵敏度乘以方便测试):
if(settingsSens == 0){
xpos = Math.max(Math.min(Mouse.getX()*8-28, 945), 4); //This means that 4< xpos< 945 so the image always stay within the window
cursor.draw(xpos, 640 - ypos);
}
settingsSens 是设置中鼠标灵敏度变化的布尔值。发生的情况是光标图像没有走出窗口,因为它的 xpos 被限制在其中,但坐标似乎消失了......这真的很难解释:看起来图像保留但坐标离开,因此如果您将鼠标移到右侧,光标会停在窗口的右侧,当您尝试将其移回时,光标会“粘”在窗口的右侧,直到 x 坐标达到 945,在这一点光标将再次向左移动并从窗口的右侧分离。我想阻止这一切!
我正在寻找的只是更改鼠标的灵敏度,而不会在更改后更改光标位置。因为到目前为止,一旦您更改灵敏度并返回,由于 xpos 乘以 8,因此坐标超出了窗口,而不是 xpos 过去以正常速度运行的旧位置。
【问题讨论】: