2013-07-06 4 views
0

스프라이트 (rect)가 화면의 터치 위치를 향하도록 회전 중입니다. 코드는 작동하지만 스프라이트가 수직으로 갈수록 더 커지는 정도의 오프셋이 있습니다. 내 문제를 아주 분명하게 보여주는 이미지를 아래에 추가했습니다.ccsprite 회전 위치가 접촉 위치로 회전 할 때 오프셋.

빨간색 점은 오프셋 문제를 표시하기 위해 포토샵에서 추가 한 터치 위치입니다. 볼 수있는 유일한 스프라이트는 사각형입니다 (IE rect).

내가 90도 각도에있을 때 오프셋이 가장 분명합니다. 그러면 점차 가까워 질수록 서서히 사라집니다.

스프라이트가 터치 위치를 정확하게 향하도록하려면 어떻게해야합니까? 또는이 오프셋을 어떻게 수정할 수 있습니까?

- (void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location]; 

    float angle = atan2f(location.y-rect.position.y, location.x-rect.position.y); 
    angle = CC_RADIANS_TO_DEGREES(angle); 
    angle *=-1; 

    rect.rotation = angle; 
    float distance = sqrtf(pow((location.x-rect.position.x), 2)+pow(location.y-rect.position.y, 2)); 
    rect.scaleX = distance; 

} 

enter image description here

+0

하는 구형 무엇인가? 당신이 보여주는 2 개의 스프라이트와 어떤 관련이 있습니까? – sergio

+0

rect는 스프라이트입니다. 터치 위치가 rect의 각도와 어떤 관련이 있는지 보여주기 위해 포토샵에 추가 한 빨간 원. –

답변

2

하지이 진술해야 :

float angle = atan2f(location.y-rect.position.y, location.x-rect.position.y); 

대신 수 :

float angle = atan2f(location.y-rect.position.y, location.x-rect.position.x); 

?

또한 문제는 스프라이트 anchorPoint과 관련 될 수 있습니다.

기본적으로 스프라이트의 고정 점은 (0.5, 0.5)입니다. 즉, 스프라이트의 중심입니다. 이것은 당신의 스프라이트에 대한 참조로 간주되는 포인트입니다. 예를 들어 스프라이트의 position이 앵커 포인트 위치입니다. 회전 각도를 적용하면 스프라이트가 앵커 포인트를 중심으로 회전합니다.

그래서, 당신은 시도하고 같이 스프라이트 앵커 포인트를 설정할 수 있습니다 :

rect.anchorPoint = ccp(0,0); 

또는

rect.anchorPoint = ccp(1,1); 

이 더 가야한다.

또는 당신이 지금처럼 앵커 포인트를두고 있지만,보기의 중심에 수학 상대를 할 수 (있는 고정 된 지점입니다 같아요) :

float angle = atan2f(location.y - viewCenter.y, location.x - viewCenter.x); 
+0

aaaargh 내가 어리석은 실수를 저질렀다. 'atan2f (location.y-rect.position.y, location.x-rect.position.x); '가 문제였습니다. 이제 코드가 정상적으로 작동합니다. 감사! –

관련 문제