나는 아주 간단한 게임을 가지고있다. 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)
을 추가했으나 현재 화면을 누르면 플레이어의 노드 크기가 조정되지만 이동도 중지된다는 것입니다. 노드의 크기와 피직스 바디를 동시에 변경하고 모션을 유지하는 방법? 변경하면
downvote 사람들은 해결책을 보여 주어야합니다 (그러나 실제 물리학 시간은 실제 전파가 아닌 가짜입니다 ..). OP를 돕기 위해 내 진술에 대한 그들의 반대 개념을 설명하려고합니다. –
결빙 시간이란 무엇입니까? 나는 크기를 바꾸고 싶을 때 운동을 중단해야하고 크기가 좋아도 공의 움직임을 계속합니까? – codddeer123
그것은 단지 하나의 아이디어 일 뿐이지 만 다른 모드를 찾을 수 있습니다 : "Matrix"영화 씬과 같은 효과를 만들 수 있습니다 (이 상태에서만 음악 속도와 게임 요소의 모든 움직임을 줄입니다). –