【问题标题】:Why do sprites in SpriteKit not bounce off the wall为什么 SpriteKit 中的精灵不会从墙上反弹
【发布时间】:2018-05-23 01:01:32
【问题描述】:

我在屏幕上有一个球和边界。我现在只是在测试物理特性,我希望球在屏幕上连续弹跳而不会减速。

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))
}

边界功能正常,但球会在屏幕周围弹跳一小段时间,然后会撞到边缘并失去其 y 动量,只是在 x 方向来回移动。

我尝试将最后一行更改为

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

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

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    将墙的摩擦力设置为0

    wall.physicsBody?.friction = 0
    

    同时将重力设置为零

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

    【讨论】:

    • 这两个我都做了,但没有影响结果。
    【解决方案2】:

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

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

    你需要应用一个向量所以你需要

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多