2017-02-24 15 views
3

나는 아주 간단한 게임을 가지고있다. accerereometer를 사용하는 고전적인 Labyrinth 게임과 비슷하지만 사용자는 3D Touch를 사용하여 사각형의 크기를 변경할 수도 있습니다. 내가 변화 할 때 그래서SKSpriteNode 위치를 변경하는 동안 SKPhysicsBody 변경

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first{ 
      let maxForce = touch.maximumPossibleForce 
      let force = touch.force 

      let forceValue = force/maxForce 

      player.size = CGSize(width: 26-forceValue*16, height: 26-forceValue*16) 
      player.physicsBody = SKPhysicsBody(rectangleOf: player.size) 
    } 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    resetSize() 
} 

func resetSize(){ 
    player.size = CGSize(width: 26, height: 26) 
} 

:

motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in 
    if let motionData = data{ 
     self.physicsWorld.gravity = CGVector(dx: motionData.acceleration.x * 7, dy: motionData.acceleration.y * 7) 
    } 
} 

하고있는 touchesMoved :

플레이어의 노드는 (여기에 특별한 아무것도) 가속도계에서 데이터를 얻을 수없는 세계의 물리학 덕분에 이동 직사각형 플레이어의 크기는 잘 작동했습니다. 노드는 장치의 방향에 따라 화면을 돌아 다니며 더 세게 누르는 동안 작아졌습니다. 문제는 physicsBody (GameViewController.swift에 view.showsPhysics = true을 설정했습니다)가 항상 동일했기 때문에 player.physicsBody = SKPhysicsBody(rectangleOf: player.size)을 추가했으나 현재 화면을 누르면 플레이어의 노드 크기가 조정되지만 이동도 중지된다는 것입니다. 노드의 크기와 피직스 바디를 동시에 변경하고 모션을 유지하는 방법? 변경하면

답변

1

physicsBody 당신은 invoved 모든 물리적 매개 변수를 손실 이전 physicsBody : 당신은 velocity 또는 angularVelocity 또는 다른 사용 가능한 매개 변수를 복사 할 수 있지만, 당신은 연속성을 가지고하지 않습니다, 충분하지 않습니다 때문에 실제 버전에 SpriteKit 프레임 워크 ()이 옵션을 가지고 있지 않습니다 : 게임 중에 동적으로 physicsBody을 변경하십시오.

또한 physicsBody을 수정하는 노드 당신의 배율을 변경할 수 있지만, 당신은 항상 예를 ​​들어 중력 축적 속도로 물리 변수를 분실 : SpriteKit 변경 사항이 자동으로 다른 사람에게 몸을 만들 수있는 스케일링 동안 physicsBody이없이 보존하기 때문에 이런 일이 축적 된 성질.

내 조언은 볼을 터치 할 때 일종의 "멈추는 시간"을 만드는 것입니다. 공을 멈출 때 physicsBody을 변경할 수 있습니다.

+4

downvote 사람들은 해결책을 보여 주어야합니다 (그러나 실제 물리학 시간은 실제 전파가 아닌 가짜입니다 ..). OP를 돕기 위해 내 진술에 대한 그들의 반대 개념을 설명하려고합니다. –

+0

결빙 시간이란 무엇입니까? 나는 크기를 바꾸고 싶을 때 운동을 중단해야하고 크기가 좋아도 공의 ​​움직임을 계속합니까? – codddeer123

+0

그것은 단지 하나의 아이디어 일 뿐이지 만 다른 모드를 찾을 수 있습니다 : "Matrix"영화 씬과 같은 효과를 만들 수 있습니다 (이 상태에서만 음악 속도와 게임 요소의 모든 움직임을 줄입니다). –