我试图创建一个街机游戏,其中一个球以恒定的速度移动并且不受重力或摩擦的影响。所以我将球创建为SKShapeNode
并将其linearDamping
和friction
设置为0
。我还设置游戏场景没有引力。但是在比赛时,如果球以较小的角度击中另一个形状的节点(圆圈),它可能会减速。球restitution
为1
,allowsRotation
为false
。
我通过在比赛开始时施加一个冲动来保持球的移动,这是一个随机的方向。
答案 0 :(得分:2)
这可能不是最理想的修复方法,但您可以将每次更新时对象的固定速度设置为特定值,即恒定速度。
解决此问题的另一种方法是在碰撞委托函数下设置对象的固定速度。
答案 1 :(得分:1)
通过在球与之接触的节点上设置physicsBody?.isDynamic = false
,我遇到了类似的问题。
例如,如果你有一个球和一块砖:
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.width / 2) // (diameter / 2) = radius
ball.physicsBody?.categoryBitMask = ballCategoryBitMask
// Detect contact with the bottom of the screen or a brick
//
ball.physicsBody?.contactTestBitMask = bottomCategoryBitMask | brickCategoryBitMask
ball.physicsBody?.friction = 0
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.linearDamping = 0
ball.physicsBody?.restitution = 1
ball.physicsBody?.applyImpulse(CGVector(dx: 10, dy: -10))
brick.physicsBody = SKPhysicsBody(rectangleOf: brick.frame.size)
brick.physicsBody?.linearDamping = 0
brick.physicsBody?.allowsRotation = false
brick.physicsBody?.isDynamic = false // Prevents the ball slowing down when it gets hit
brick.physicsBody?.affectedByGravity = false
brick.physicsBody?.friction = 0.0