我已经很简单的游戏。这就像使用加速计的经典迷宫游戏,但用户也可以使用3D Touch来改变矩形的大小。改变SKPhysicsBody,同时改变SKSpriteNode的位置
玩家的节点是矩形,其移动得益于世界物理学从加速计(在这里没有什么特别的)获取数据:
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)
}
所以,当我正在改变玩家的大小工作得很好:节点正在屏幕上移动,基于设备的方向,同时越来越紧,越来越小。问题是physicsBody(我在GameViewController.swift中设置了view.showsPhysics = true
)始终是相同的,所以我添加了player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
,但现在当我按下屏幕时,播放器的节点调整大小,但它也停止移动。如何同时更改节点的大小和物理体积并保持运动?
人谁downvote应该表现出一个解决方案(但真正的物理瓦尔时间真正的传播,而不是伪造..),并试图解释我的陈述,以帮助他们的OP相反的想法。 –
冻结时间是什么意思?当我想要改变尺寸时,我应该停止运动吗?尺寸没问题后继续运动球吗? – codddeer123
这只是一个想法,但你可以找到其他模式:你可以创造类似于它周围的“矩阵”电影场景的效果(降低音乐速度和游戏元素的所有动作只有在这种状态..) –