节点在Sprite Kit中减慢速度

时间:2015-10-08 19:46:06

标签: swift sprite-kit

我试图创建一个街机游戏,其中一个球以恒定的速度移动并且不受重力或摩擦的影响。所以我将球创建为SKShapeNode并将其linearDampingfriction设置为0。我还设置游戏场景没有引力。但是在比赛时,如果球以较小的角度击中另一个形状的节点(圆圈),它可能会减速。球restitution1allowsRotationfalse

我通过在比赛开始时施加一个冲动来保持球的移动,这是一个随机的方向。

2 个答案:

答案 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