2013-07-28 2 views
0

Java에서 일부 인공 지능 작업을하고 있습니다. 엔티티가 점으로 이동하면 그 움직임이 자연스럽지 않게 보입니다. 시작점과 대상이 같지 X 그리고 Y는 서로 떨어져 거리를하는 경우, 운동은 다음과 같습니다 Smoother movement 현재부드러운 동작 java

, 운동이 수행됩니다 Unnatural movement

는 내가이 같은 이동보고 싶은 것은 이것이다 like :

나는 이보다 훨씬 더 나은 운동 방법을 추측하고 있습니다.

그래서 제가 알고 싶은 것은 아마도 움직여야 할 각도를 어떻게 잡아야하고, 그렇게하기 위해 필요한 x와 y 속도입니다.

+0

* * 구체적인 * 질문은 무엇입니까? – gparyani

+1

두 점이 있다면, 그들을 연결하는 선을 계산하고, 그에 따라 x 또는 y 운동을 조절할 수 있습니다 (예 : + x를 추가 할 때마다 + 1.2y 등). – Kon

답변

6

각 방향으로 이동할 총 거리에 따라 x 및 y 속도를 조정하면됩니다.

위치를 지정해야하는 경우에만 부동 소수점 및 올림 계산을 int으로 수행하는 것이 도움이됩니다.

int tX = target.x; 
int tY = target.y; 
float speed = getOwner.getMoveSpeed(); 
float dX = tX - oX; 
float dY = tY - oY; 
float dist = Math.sqrt(dX * dX + dY * dY); 
float sX = speed * dX/dist; 
float sY = speed * dY/dist; 

getOwner().addX((int) (sX + 0.5)); 
getOwner().addY((int) (sY + 0.5)); 
+0

대단히 감사합니다. – JPatrickDev

2

두 지점 사이에 선을 그리는 과정을 설명하는 것입니다.

비교적 간단한 정수 전용 알고리즘 (예 : Bresenham)이 도움이 될 수 있습니다.