2016-10-05 1 views
1

필자의 원래 빌드에서는 스프라이트가 정적 이었으므로 을 SKPhysicsBody으로 전달하는 대신 node을 전달하는 대신 정확한 물리 충돌을 수행하기 위해이 도구를 사용하여 경로 SpriteKit's SKPhysicsBody with polygon helper tool을 정의했습니다.스프라이트를 애니메이트하는 동안 즉석에서 SKPhysicsBody를 계산하는 방법은 무엇입니까?

그러나 이제는 게임 플레이 도중 앞뒤로 움직 이도록 스프라이트에 애니메이션을 적용합니다. (필자의 물리 경로는 위와 같이 고정되어 있음) 내 물리 팀원은 더 이상 플레이어가 화면에서 보는 것과 일치하지 않습니다.

도우미 도구는 애플이 API에서 결국 수정하게 될 해킹 비트처럼 보였습니다. SpriteKit에 최근에 나왔기 때문에 여기서 도울 수있어서 node을 전달하고 정확한 physicsbody를 정의 할 수 있습니다. 하드 코딩 방식? 그렇지 않은 경우 다른 대안이 있습니까?

+0

그냥 당신이, 내가이 발생 후 몸에서 경로를 추출 할 수 있습니다 거의 긍정적입니다 필요하게 질감을 사용 : 여기

은 예입니다. SKPhysicsBody (텍스처 : .... – Knight0fDragon

+0

자세히 설명해 줄 수 있습니까? 애니메이션의 각 프레임에 대한 경로에서 하드 코딩을 제외하고는 자산의 모양과 일치하는 SKPhysicsBody를 어떻게 만들 수 있습니까? – GarySabo

+0

경로에 하드 코드해야합니다. 각 애니메이션마다 SKPhysicsBody는 텍스처가 어떻게 보이는지 신경 쓰지 않으므로 텍스쳐가 바뀌었을 때 몸체에 변화가 있음을 알릴 필요가 있습니다. – Knight0fDragon

답변

2

성능이 얼마나 좋을지 모르지만 각 텍스처에 대해 물리 본문을 미리 생성 한 다음 맞춤 동작을 사용하여 physicsBody와 함께 스프라이트에 애니메이션을 적용 할 수 있습니다.

func testAnimation() { 

    var frameTextures = [SKTexture]() 
    var physicsBodies = [SKPhysicsBody]() 

    for index in 1...8 { 
     // The animation has 8 frames 
     let texture = SKTexture(imageNamed: "guy\(index)") 
     frameTextures.append(texture) 
     let physicsBody = SKPhysicsBody(texture: texture, size: texture.size()) 
     physicsBody.affectedByGravity = false 
     physicsBodies.append(physicsBody) 
    } 

    let sprite = SKSpriteNode(texture: frameTextures[0]) 
    let framesPerSecond = 16.0 
    let animation = SKAction.customAction(withDuration: 1.0, actionBlock: { node, time in 
     let index = Int((framesPerSecond * Double(time))) % frameTextures.count 
     if let spriteNode = node as? SKSpriteNode { 
      spriteNode.texture = frameTextures[index] 
      spriteNode.physicsBody = physicsBodies[index] 
     } 
    }) 

    sprite.run(SKAction.repeatForever(animation)); 
    sprite.position = CGPoint(x: 0, y: 0) 

    addChild(sprite) 

} 
+0

고마워하지만 내 질문은 물리 구조를 업데이트하는 방법이 아니었다, 하드 코딩 주위에 모든 프레임에 대한 경로를 얻는 방법 내 게임에서 애셋의 애니메이션 ... @KnightOfDragon의 의견에서 다른 방법이없는 것처럼 들리네 ... – GarySabo

+0

내 게시물의 맨 아래에 'SKPhysicsBody (texture : texture!, size : texture! .size)'메서드는 각 프레임에 물리 구조체를 생성합니다. – mikeytdan

+0

감사합니다. @mikeytdan 원래 오해했습니다! – GarySabo

관련 문제