2016-06-20 1 views
2

Minecraft 프로젝트의 경우 플레이어의 얼굴을 (0, 60, 0)으로 서서히 만들고 싶었습니다. 지금까지 내가 시도한 모든 것은 플레이어가 (0, 60, 0) 주변을 720 ° 이상 움직일 때 실패한 것으로 보입니다.Minecraft가 플레이어의 방향을 서서히 수정 함

누구나 카메라를 (0, 60, 0)으로 원활하게 이동시키는 방법에 대한 아이디어가 있습니까?

감사합니다.

다음은 지금까지 (전환 할 때 루프에서 실행) 내 코드입니다 :

int x = 0; 
int y = 60; 
int z = 0; 

player = Minecraft.getMinecraft().thePlayer; 

double dirx = player.posX - 0; 
double diry = player.posY - 60; 
double dirz = player.posZ - 0; 

double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz); 

dirx /= len; 
diry /= len; 
dirz /= len; 

double pitch = Math.asin(diry); 
double yaw = Math.atan2(dirz, dirx); 

//to degree 
pitch = pitch * 180.0/Math.PI; 
yaw = yaw * 180.0/Math.PI; 

yaw += 90f; 

if(yaw > player.rotationYaw) { 
    player.rotationYaw++; 
} else if(yaw < player.rotationYaw) { 
    player.rotationYaw--; 
} 

편집 : 문이 제대로 작동하는 경우없이

이 코드. 요와 피치 변수는도 단위입니다.

나는 몇 분 동안 (0, 60, 0)을 돌아볼 때마다 화면이 갑자기 360 ° 선회한다는 사실을 분명히 알지 못합니다.

+0

플레이어가 현재보고있는 방향에서 회전하고 싶습니까? 전 세계 또는 플레이어와 관련된 위치를보고자하는 위치는 무엇입니까? 'player.rotationYaw'는도 또는 라디안입니까? – ManIkWeet

+0

@ManIkWeetYearYaw는 제가 알고있는 각도입니다. – Pokechu22

+0

@ ManIkWeet 각도가 – JustAJavaCoder

답변

1

이것은 일반적인 문제입니다. 또는 오히려 사람들이 흔히 갖고있는 문제는 "시간이 지남에"무언가를하고 싶고 "시간이 지나면"어떻게 움직이는 지 모릅니다.

원하는 방향으로 카메라가 도달 할 때까지 마다 lerp 카메라에 작은 틈이 필요합니다.

가) 이벤트 핸들러를 만들고 TickEvent 중 하나를 구독하고 (적절한 것을 선택하고 Phase.START 또는 Phase.END 중 하나의 Phase를 선택해야합니다. 프레임을 여러 번 실행).

b) 코드가 이미있는 경우 (참고 :이 코드는 이미 한 번만 호출해야합니다), 거기에서 lerping을 수행하십시오.

lerp를 계산하는 방법을 모르십니까? Stack Overflow already has that answered.

관련 문제