我在坦克图像之上有一个枪图像。我希望枪指向鼠标位置,以便可以使用鼠标瞄准。原始枪图像将指向上方。我正在使用 Slick2D,它的图像类有一个旋转函数,它需要一个角度。我该怎么做呢?
问问题
8610 次
3 回答
8
您可以通过询问 Input 对象来找到用户鼠标的位置。这是通过向 GameContainer 询问输入来完成的。
Input userInput = gameContainer.getInput();
float mouseX = userInput.getMouseX();
float mouseY = userInput.getMouseY();
鼠标和枪的位置可以用来确定枪需要面对的角度。我们可以想象在枪和鼠标之间画一条线并找到这条线的角度。这个角度是枪需要面对的角度才能“指向”鼠标。
Vector2f gunLocation = gun.getLocation();
float xDistance = mouseX - gunLocation.x;
float yDistance = mouseY - gunLocation.y;
double angleToTurn = Math.toDegrees(Math.atan2(yDistance, xDistance));
gunImage.setRotation((float)angleToTurn);
于 2012-05-05T13:15:39.950 回答
1
瞄准是这样完成的:
从坦克到鼠标的方向是这样的:
float deltaX = mouse.x - tank.x;
float deltaY = mouse.y - tank.y;
// The resulting direction
return (int) (360 + Math.toDegrees(Math.atan2(deltaY, deltaX))) % 360;
只需将坦克的方向更新为当前鼠标位置,例如在mouseMoved
事件中。
旋转图像:
查看堆栈溢出或 java doc: "Graphics2D", "affine transform", "translation"
。也许你的引擎已经提供了一些库函数。
希望有帮助。
于 2012-05-05T13:03:32.273 回答
0
以上述答案为基础..
因为 y 轴正在减少尝试:
float deltaX = mouse.x - tank.x;
float deltaY = tank.y - mouse.y;
于 2013-08-17T03:37:44.017 回答