我有一个球,我向空中射击:
它的初始化方式如下:
func initBallNode() {
// TODO: Create ball node
ballNode = SKSpriteNode(imageNamed: "Ball1") // Create a ball
ballNode.zPosition = ZPositions.ball
let offsetFromCorner: CGFloat = 20 // Offset from bottom-left of screen
ballNode.position = CGPoint(x: frame.minX + ballNode.size.width / 2 + offsetFromCorner, y: frame.minY + ballNode.size.height / 2 + offsetFromCorner)
ballNode.physicsBody = SKPhysicsBody(circleOfRadius: ballNode.size.width / 2)
ballNode.physicsBody?.affectedByGravity = true
ballNode.physicsBody?.angularDamping = 1 // <-- Does not set a minimum-speed
addChild(ballNode)
}
如何降低球的最小速度/速度,使球滚动得更少,更早地达到完全停止?
在不影响物体质量(使物体掉落得更早)的情况下,是否有物理性质可以处理?
如有任何疑问,请询问!
答案 0 :(得分:0)
您可以增加friction
中的physicsBody
。默认情况下,摩擦值为0.2,但范围可能为0.0到1.0
答案 1 :(得分:0)
这仍然不是答案。此问题仍然存在,如原始答案下方的修改所述。
由于stored properties in Swift extensions not being allowed(在Objective-C中产生了一点点),因此变得相当困难。但是,经过一些研究和测试之后,我提出了目前可以正常使用的解决方案:
import SpriteKit
// Key to access the stored properties
private var minimumSpeedAssociatedKey: UInt8 = 0
extension SKPhysicsBody {
// Minimum speed for each node
var minimumSpeed: CGFloat? {
get { return objc_getAssociatedObject(self, &minimumSpeedAssociatedKey) as? CGFloat }
set(newValue) { objc_setAssociatedObject(self, &minimumSpeedAssociatedKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) }
}
// Update the speed for each node
func updateSpeed() {
guard let safeMinimumSpeed = minimumSpeed else {
assert(false, "You have tried to update an object speed, without setting the minimum for the node: \"\(self.node?.description ?? "Unavailable")\".")
}
let currentSpeed = sqrt(pow(velocity.dx, 2) + pow(velocity.dy, 2))
if currentSpeed < safeMinimumSpeed && currentSpeed > 0 {
angularVelocity = 0
velocity = CGVector(dx: 0, dy: 0)
}
}
}
将其放在项目的Swift文件中。然后,您可以设置最低速度:
ballNode.physicsBody?.minimumSpeed = 30
然后,像这样覆盖更新功能:
override func didFinishUpdate() {
ballNode.physicsBody?.updateSpeed()
}
结果,球现在不再滚动到低于30
的速度,而是停止了。停止仍然几乎没有引起注意,因为之前的球在5秒内的运动非常缓慢。这是我一直在寻找的结果。
我希望这对人们有所帮助,如果您找到了更好的解决方案(或Apple添加了新资产),请发表您自己的答案。 :)
编辑1:
我现在的地形变化很大。但是,当球撞到山丘时回滚时,这会引起奇怪的物理现象。因此,这不是一个完全解决的问题。