2014-01-24 2 views
1
SKSpriteNode *_node; 

- (void)didBeginContact:(SKPhysicsContact *)contact 
{ 
    _node.alpha = 0.5; //this works 
    _node.zRotation = 0.5; // this doesn't work 
} 

어떤 아이디어가 zRotation으로 작동하지 않습니까? NSLog을 시도했지만 오른쪽에 zRotation이 표시되지만 화면이 표시되지 않습니다.스프라이트 키트 : DidBeginContact에서 z 회전을 변경하십시오.

+0

에서 물리학의 몸을 다시했다? 당신은 무엇을 얻을 것으로 예상합니까? –

+0

_node가 회전하는 것을 볼 것으로 예상되지만 회전하지는 않습니다. –

+0

'zRotation'이 이미 '0.5'로 설정되어있을 수 있습니까? –

답변

1

SpriteKit에 대해 runloop이 어떻게 보이는지 살펴보십시오. 물리학을 시뮬레이션 할 때까지는 아무 것도 그려지지 않습니다. 따라서 zRotation을 수동으로 설정하더라도 physicsBody에 의해 재정의되고 자체 값으로 설정됩니다. NSLog를 렌더링하기 전에 -didSimulatePhysics 메소드에 넣어 zRotation을 얻으십시오. zRotation 설정자를 -didSimulatePhysics로 이동하려고합니다. 레버를 명중 할 때 콜백을 얻을 것이다 있도록 연락처 개체로 레버를 설치 : 작동 할 수 https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Actions/Actions.html

+0

한 방향으로 만 움직이는 방향 레버를 만들려고합니다. 따라서 레버가 다른 방향으로 눌려지면 움직이지 않아야합니다. didEvaluateActions 및 didSimulatePhysics에서 시도했지만 작동하지 않습니다. 레버는 여전히 움직이며 멈 춥니 다. –

0

또 다른 아이디어 :

작업의 순서는

-update: 
action evaluation 
-didEvaluateActions 
run physics 
-didSimulatePhysics 
render the scene 

참조입니다. 레버와 충돌하는 객체의 위치를 ​​가져옵니다. 물체가 잘못된 쪽/방향으로 충돌하면 level.physicsBody.allowsRotation = NO;을 설정하고 그렇지 않으면 yes로 설정하십시오. zRotation이 작동하지 않으면 강제로 시도 할 수도 있습니다.

+0

나는 그것을했고 그것은 조금 움직일 것이다. 내가이 객체에 위임자를 설정해야하는 접촉 객체로 만들면 그런 객체를 만지는 객체를 하나만 가질 수 있다고 말할 수 있습니까? 또 다른 것은 DidBeginContact에서 zRotation을 강제 실행해도 아무런 효과가 없습니다. 왜 알파가 작동하더라도 이것이 왜 그렇게 궁금합니다. –

+0

지금까지 내가 할 수있는 최선의 방법은 비 회전 방향으로 튀어 오르는 것입니다. DidBeginContact에서 현재 zRotation을 설정하고 DiDEvaluateActions에서 매개 변수를 전달합니다. –

0

physicsBody가 0으로 설정된 상태에서 physicsBody가없는 SKSpriteNode에 대해 zRotation과 위치를 설정할 때 비슷한 문제가있었습니다. 모든 것이 정상이었습니다. joshd는 physicsBody의 시뮬레이션이 어떻게 수동으로 설정 한 후에이 값을 무시하는지 가정합니다. 그래서 나에 대한 해결 방법은 "화면이 표시되지"무엇을 의미합니까 일시적으로, 다음의 방향을 몸을 제거하고 스프라이트를 놓고 다음 처음부터 또는 저장 특성

storedPhysicsBody = physicsBody 
physicsBody = nil 
position = newPosition 
zRotation = newZRotation 
physicsBody = storedPhysicsBody