为什么SpriteKit中的精灵不会从墙上反弹

时间:2017-10-12 07:24:18

标签: ios swift

我的屏幕上有一个球和边界。我现在正在测试物理,我希望球在屏幕上不停地反弹而不会减速。

let b = self.ball?.copy() as! SKShapeNode?

if b != nil {
    ball!.position = CGPoint(x: CGFloat.random(min: -(self.frame.size.width/2), max: self.frame.size.width/2), y: CGFloat.random(min: -(self.frame.size.height/2), max: (self.frame.size.height/2)))

    b?.physicsBody?.linearDamping = 0
    b?.physicsBody?.restitution = 1
    b?.physicsBody?.angularDamping = 0
    b?.physicsBody?.friction = 0

    self.addChild(b!)

    b?.physicsBody?.applyImpulse(CGVector(dx: 1000, dy: 50))
}

边界功能正常,但是球会在屏幕上弹跳很短的时间,然后会撞到边缘并失去其动量,只能来回移动x方向。

我尝试将最后一行更改为

b?.physicsBody?.velocity = CGVector(dx: 1000, dy: 50)

但它做同样的事情。在边界上恢复原状也设为1。

2 个答案:

答案 0 :(得分:0)

将墙的摩擦力设为0

wall.physicsBody?.friction = 0

还将重力设置为零

self.physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)

答案 1 :(得分:0)

问题是你正在施加冲动。你注意到了它,但没有写

b?.physicsBody?.velocity = CGVector(dx: 1000, dy: 50)

您需要应用矢量以便

b?.physicsBody?.applyForce(CGVector(dx: 1000, dy: 50))