gpt4 book ai didi

ios - 在更改 SKSpriteNode 位置的同时更改 SKPhysicsBody

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:51 26 4
gpt4 key购买 nike

我有一个非常简单的游戏。这就像使用加速度计的经典迷宫游戏,但用户还可以使用 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)
}

因此,当我改变播放器的尺寸时,它运行良好:节点根据设备的方向在屏幕上移动,并且在用力按压时它会变小。问题是 physicsBody(我在 GameViewController.swift 中设置了 view.showsPhysics = true)总是一样的,所以我添加了 player.physicsBody = SKPhysicsBody(rectangleOf: player. size) 但现在当我按下屏幕时,播放器的节点会调整大小,但它也会停止移动。如何同时更改节点的大小和物理体并使其保持运动?

最佳答案

当您更改 physicsBody 时,您会丢失所有涉及您之前的 physicsBody 的物理参数:您可以复制 velocityangularVelocity 或其他可用参数,但这还不够,你永远不会有连续性,因为 SpriteKit 框架(在实际版本上)没有这个选项:动态更改 physicsBody 在游戏中。

您还可以更改节点的比例以修改 physicsBody 但您总是会丢失物理变量,例如由于重力导致的累积速度:发生这种情况是因为 SpriteKit在缩放期间自动更改 physicsBody 以创建其他物体而不保留累积的属性。

所以我的建议是当你触球时创造一种“卡住时间”,当球停止时你可以改变你的 physicsBody

关于ios - 在更改 SKSpriteNode 位置的同时更改 SKPhysicsBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42445561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com