gpt4 book ai didi

java - 将图像旋转到 MousePos?

转载 作者:行者123 更新时间:2023-11-30 11:53:56 34 4
gpt4 key购买 nike

我想在 java 中旋转一个图像,用

初始化
            playerimage = Toolkit.getDefaultToolkit().getImage("C:/Game/player.png"); //Load Player Image

绘制:

        Graphics2D g = buffer.createGraphics();
g.drawImage(playerimage, player.getX(), player.getY(), null); // Draw Player

现在,我想让我的播放器图像旋转到我的鼠标,所以它基本上是在看我的鼠标。我该怎么做?

最佳答案

您需要做的第一件事是在同一个坐标系中获取鼠标位置和玩家位置。当你得到我们的鼠标位置时,它通常会在屏幕坐标中,而你的玩家可能在你自己的“世界坐标”空间中。如果玩家位置直接与像素相关联,那么您可以跳过。

将鼠标位置转换为世界坐标..

mouseWorld.X = (mouseScreen.X / screenWidth) * worldWidth;

在同一坐标系中后,您需要找到旋转所需的角度。这个等式会根据你的玩家艺术面向的方向而改变,让我们假设它面向位置 X 轴。然后,您只需使用点积即可找到玩家面对的位置与点指向的位置之间的角度。

The dot product is A(dot)B = mag(A) * mag(B) * cos (theta) 
mag = magnitude of the vector
theta = angle between the two vectors
So if you normalize the vectors (make them length 1) then..
A(dot)B = 1 * 1 * cos(theta)
A(dot)B = cos(theta)
acos(A(dot)B) = theta

那么让我们来写代码...

Vector mouseVec(mouseWorld.X, mouseWorld.Y);
Vector playerVec(playerWorld.X, playerWorld.Y);

//You want to find the angle the player must turn, so pretend the player pos it the origin
mouseVec -= playerVec;

//Create a vector that represents which way your player art is facing
Vector facingVec(1, 0);

mouseVec.Normalize(); //Make their length 1
facingVec.Normalize();

double dotProd = mouseVec.dot(facing);
double angBetween = acos(dotProd);

然后调用'rotate'并传入angBetween!

仔细检查单位是否正确,acos 通常会返回“弧度”,而旋转函数会采用“度”,因此您需要进行转换。

更多 vector 信息: Vector Info

关于java - 将图像旋转到 MousePos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5998515/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com