2015-02-06 8 views
0

신속한 SKSpriteNode가 물리층을 두 개 가지고 있고 기본 방향이 아닌 상태에서 자동으로 방향을 수정하게하는 가장 좋은 방법은 무엇입니까?SKSpriteNode with physicsBody 자동 올바른 방향성

예를 들어 나는 다른 물건으로 옆으로 두들겨 맞고 스틱 맨이 기립 자세로 기울고 방향을 바꾼다는 2D 스틱 맨을 가지고 있습니다.

+1

각도 충동을 적용 따라 그는 아마도 강도와 어느 쪽 :

내 장면은 내가 같은 서브 클래스 SKSpriteNode의 업데이트 방법에 회전을 구현 같은 유사 애플의 어드벤쳐 게임으로, 각 노드를 업데이트 더 자주 충동을 적용하면 더 성격을 배웠어 – LearnCocos2D

답변

1

내가 과거에 해왔 던 방식은 물리학자가 진정 될 때까지 기다리는 것이고, stickman의 물리 엔진을 끄고, stickman의 방향을 바꾸고, 물리 엔진을 다시 켜는 것입니다.

stickman의 재배 향을 움직이는 standupAction이라는 액션을 작성하십시오 (회전 또는 점프 업). 그런 다음 다음과 같이하십시오.

죄송합니다.이 Objective-C는 신속하지 않으며 신속하지 않지만 쉽게 번역 할 수 있어야합니다.

if (stickman.physicsBody.resting) { 
    stickman.physicsBody.dynamic = NO; 
    [stickman runAction:[SKAction sequence:@[ 
       standupAction, 
       [SKAction runBlock:^{ stickman.physicsBody.dynamic = YES;}] 
       ]]]; 
} 

이 방법의 유일한 단점은 stickman이 오기 전까지는 1 초가 걸릴 수 있습니다. Box2d는 상당히 오랜 시간이 걸립니다. 그러나 기다리면 매우 현실적입니다.

또는 stickman의 방향을 확인하고 균형이 45˚ 이상 벗어난 경우 충격으로 방향을 재조정 할 수 있습니다. 이 같은 정확한 움직임이 필요할 때 얼마나 많은 힘을 적용해야 하는지를 아는 것은 매우 어려울 충동을 느낍니다.

+0

고마워요 나는 휴식 속성을 생각하지 못했습니다! 제 경우에는 1 초가 재료 대기가되어서는 안됩니다. – Revick

0

업데이트하기 만하면 physicsBody를 동적으로 설정하지 않아도됩니다.

if (isTouchingGround) { 
      if self.zRotation != 0 && !rotating { 
       let actions = [ 
        SKAction.runBlock { 
         self.rotating = true 
        }, 
        SKAction.rotateToAngle(0, duration: 1.0), 
        SKAction.runBlock { 
         self.rotating = false 
        }] 
       runAction(SKAction.sequence(actions)) 

      } 
     } 
+0

Apple의 모험은 중력 등을 계산하는 데 물리 엔진을 사용하지 않습니다. 물리 엔진이 물리 시스템을 관리하는 동안 수동으로 회전을 변경하고 있습니다. 물리 엔진이 캐릭터의 움직임을 제어하기 위해 당신과 싸우고있을 때 글리치가 생길 수 있습니다. @ LearnCocos2D의 원래 제안을 활용하고 충동을 사용하여 다시 0으로 돌립니다. –