로 초기화 된 java 이미지를 회전하고 싶습니다.
Graphics2D g = buffer.createGraphics();
g.drawImage(playerimage, player.getX(), player.getY(), null); // Draw Player
자 이제 내 마우스로 회전하여 내 마우스를 찾고 싶습니다. 어떻게하면 좋을까요?
로 초기화 된 java 이미지를 회전하고 싶습니다.
Graphics2D g = buffer.createGraphics();
g.drawImage(playerimage, player.getX(), player.getY(), null); // Draw Player
자 이제 내 마우스로 회전하여 내 마우스를 찾고 싶습니다. 어떻게하면 좋을까요?
먼저해야 할 일은 마우스 위치와 플레이어 위치를 같은 좌표계로 가져 오는 것입니다. 마우스 위치를 잡았을 때 플레이어가 자신의 '월드 코즈 (World Coords)'공간에있을 때 일반적으로 화면 좌표로 표시됩니다. 플레이어 위치가 픽셀에 직접 연결되어 있으면 건너 뛸 수 있습니다. 같은 COORD 시스템에서 일단
세계 좌표로 마우스 위치를 변환
..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);
다음 '회전'호출하고 angBetween 전달 ... 코드를 수행 할 수 있습니다!
단위가 올바른지 두 번 확인하십시오. 종종 acos가 '라디안'을 반환하고 회전 기능이 '도'를 사용하여 변환해야합니다.
더 많은 벡터 정보 : Vector Info
당신이 원하는 마십시오에 * 정확하게 마우스를 향해 항상 * 얼굴, 또는 플레이어가 마우스를 이동하면 있도록, 그것은 제한된 속도로 마우스를 향해 켜시겠습니까 너무 빠르면 순간적으로 이미지를 따라 잡습니다. – Wyzard