2014-10-01 2 views

답변

2

플레이어 노드가 적 노드와 마주보고 있는지 확인하려면 노드 간의 각도를 계산해야합니다 (그림 1의 각도 theta 참조).

enter image description here

도 X에서의 차이로 나눈 값 Y의 차의 ​​역 탄젠트 취하여 장면

계산 세타 노드 사이의 각도를 도시 한 다이어그램 :

CGFloat dx = enemy.position.x - player.position.x; 
    CGFloat dy = enemy.position.y - player.position.y; 

    theta = atan2f(dy, dx); 

쎄타와 플레이어의 z 회전의 차이가 작은 경우 플레이어가 적과 마주합니다.

if (fabs(theta-player.zRotation) < maxDifference) { 
     // Do something here 
    } 
+0

기회가있을 때 이메일을 보내주십시오. 내 주소가 내 프로필 페이지에 있습니다. – sangony

+0

감사합니다. 감사합니다. 내가 놓친 유일한 것은 둘 사이에 절대를 되돌려주는 것이었다. – user1351956

0
if((isPlayerFacingLeft == true) && (_player.position.x > enemy.position.x)) 
{ 
    // player is on right of object and facing towards object 
} 

if((isPlayerFacingLeft == false) && (_player.position.x < enemy.position.x)) 
{ 
    // player is on left of object and facing towards object 
} 
+0

그러나 플레이어는 조이스틱으로 제어되며 왼쪽이나 오른쪽으로 내려가는 것만이 아니라 360도 회전 할 수 있습니다. 나는 원래의 질문에서 이것을 언급해야했다. 미안합니다. – user1351956

+0

@ user1351956 - 그럼 플레이어 또는 적의 zRotation에서 180을 뺀 절대적인 결과를 가져 와서 두 각도를 비교하고보기에 허용되는 여백을 설정하십시오. 아마 20 살 같은 것. 나머지는 위 코드와 거의 같습니다. – sangony

관련 문제