Slick2D:更改鼠标灵敏度会更改光标x / y位置

时间:2015-10-25 21:51:24

标签: java window mouse slick2d

我正在构建一个测试游戏,我可以尝试创建游戏中发生的某些效果,例如当用户更改设置中的值时更改鼠标灵敏度。首先,让我澄清所有这些都是使用Slick2D和lwjgl在Java中完成的。

现在已经不在了,我需要告诉你我的鼠标在屏幕上的显示方式。由于我将使用鼠标移动,我决定在我的Mouse.setGrabbed(true);方法中使用init{}隐藏原生鼠标,从网上抓取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所以光标停留在我的窗口范围内(不是真正重要的信息,但我决定将其包括在内)。

让我们解决问题。在&#34;默认&#34;如上所述,它与鼠标的状态相关联,与原生鼠标的坐标相关联。所以光标的渲染方式如下:

cursor.draw(xpos, 640 - ypos);
现在,当用户进入游戏设置并将鼠标灵敏度更高(例如,比通常速度高8倍)时,

(640-ypos是必需的,因为鼠标从左下角开始发芽)像这样渲染光标坐标(只有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被限制在其中,但是坐标似乎已经消失......它很难解释:它看起来像是图像保持不变但坐标离开,所以如果你将鼠标移动到右边,光标会停在窗口的右侧,当你试图把它带回来时,光标会停留在光线上并且#34;胶合&#34;在窗口的右侧,直到x坐标达到945,此时光标将再次向左移动并从窗口的右侧分离。我想阻止这个!

所有我正在寻找的是改变鼠标的灵敏度而不改变后光标改变位置。因为到目前为止,一旦你改变灵敏度并返回,由于xpos乘以8,坐标离开窗口而不是xpos用于正常速度的旧位置。

1 个答案:

答案 0 :(得分:0)

您缺少的是坐标的正确边界,因为您需要在计算xPosyPos时应用灵敏度修改,而不是在绘制鼠标时应用。

我强烈建议您将x和y坐标的计算逻辑正确地提取到一个单独的方法中,一次封装一个坐标的灵敏度和边界,如下所示:

static int boundedCoordinate(int coordinate, int sensitivity, int maximum, int minimum) {
    // 4 < xpos < 945
    int result = coordinate * sensitivity;
    result = Math.max(minimum, result);
    result = Math.min(maximum, result);
}

然后为你的绘图循环,去寻找类似的东西:

cursor.draw(boundedCoordinate(xPos, sensitivity, X_MAXIMUM, X_MINIMUM),
    boundedCoordinate(yPos, sensitivity, Y_MAXIMUM, Y_MINIMUM));
相关问题