我有一个非常简单的游戏。它类似于经典的迷宫游戏,使用加速度计,但用户还可以使用3D Touch改变矩形的大小。
玩家的节点是一个矩形,通过从加速度计获取数据的世界物理来移动(在这里没有什么特别的):
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 :
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)
}
当我更改播放器的大小时,它可以正常工作:节点根据设备的方向在屏幕上移动,并且按下更硬时变小。问题是物理体(我在GameViewController.swift中设置了
view.showsPhysics = true
)始终相同,因此我添加了player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
,但现在当我按压屏幕时,播放器的节点会调整大小,但也停止移动。如何同时更改节点的大小和物理体并保持其运动?