2014-09-02 1 views
2

physicsBody 로테이션 방향에 applyImpulse 메소드로 physicsBody를 이동하려고합니다.SpriteKit은 physId를 회전시킨 물리 객체를 이동합니다.

예를 들어, physicsBody는 모양이 정사각형이며, 나는 그것이 수직으로 올라가도록 충동을 적용하는 "이동"을 호출합니다. 그런 다음 physicsBody를 45도 오른쪽으로 회전하는 메서드를 호출합니다. "이동"방법을 다시 호출하면 physicsBody가 오른쪽 위로 비스듬히 움직입니다.

아무도 도와 줄 수 있습니까?

답변

3

스프라이트 키트의 좌표 및 회전 규칙을 따르는 것이 좋습니다. 구체적으로, 스프라이트 이미지는 0도 (기본값)에서 오른쪽을 향해야하고 양수 값은 반 시계 방향 회전이어야합니다.

// Specify the force to apply to the SKPhysicsBody 
CGFloat r = 5; 

// Create a vector in the direction the sprite is facing 
CGFloat dx = r * cos (sprite.zRotation); 
CGFloat dy = r * sin (sprite.zRotation); 

// Apply impulse to physics body 
[sprite.physicsBody applyImpulse:CGVectorMake(dx,dy)]; 
+0

에에 보인다 여기에 스프라이트가 직면하고있는 방향으로 충동을 적용하는 한 가지 방법입니다 말했다 매번 왼쪽에서 충동?! 프리랜서 프로토 타입을 사용할 수 있습니까? – shahidaltaf

+0

임펄스를 적용하기 전에 스프라이트를 회전 시켰습니까? – 0x141E

+0

가 작동합니다. 위의 샘플 코드를 참조하십시오. thanks – shahidaltaf

2

업데이트 :

는 아래의 감사와 고정 @ 0x141E

-(void)characterJump { 

    CGFloat radianFactor = 0.0174532925; 
    CGFloat rotationInDegrees = _body.zRotation/radianFactor; 
    CGFloat newRotationDegrees = rotationInDegrees + 90; 
    CGFloat newRotationRadians = newRotationDegrees * radianFactor; 

    CGFloat r = 500; 

    CGFloat dx = r * cos(newRotationRadians); 
    CGFloat dy = r * sin(newRotationRadians); 

    [_body.physicsBody applyImpulse:CGVectorMake(dx, dy)]; 
} 
관련 문제