代码之家  ›  专栏  ›  技术社区  ›  Facundo Schiavoni

雪碧不受物理影响

  •  0
  • Facundo Schiavoni  · 技术社区  · 9 年前

    我想要一个 SKSpriteNode 保持在屏幕上移动,并永远随着边缘反弹。所以我设置了边缘的物理特性:

        let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
        borderBody.friction = 0
        self.physicsBody = borderBody
        physicsWorld.gravity = CGVectorMake(0, 0)
    

    然后是精灵的物理:

        ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
        ball.size = CGSizeMake(30, 30)
        ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
        ball.physicsBody?.allowsRotation = false
        ball.physicsBody?.restitution = 1.0
        ball.physicsBody?.linearDamping = 0.0
        ball.physicsBody?.friction = 0.0
        ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
    
        self.addChild(ball)
    

    问题是,精灵无论如何都不会受到物理的影响,而是停留在屏幕的中央。我做错了什么?

    1 回复  |  直到 9 年前
        1
  •  3
  •   hamobi    9 年前

    你需要把球添加到场景中,然后再给它施加冲动。

    import SpriteKit
    
    class GameScene: SKScene {
        override func didMoveToView(view: SKView) {
    
            let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
            borderBody.friction = 0
            self.physicsBody = borderBody
            physicsWorld.gravity = CGVectorMake(0, 0)
    
            let ball = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(30, 30))
            ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
            ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
            ball.physicsBody?.allowsRotation = false
            ball.physicsBody?.restitution = 1.0
            ball.physicsBody?.linearDamping = 0.0
            ball.physicsBody?.friction = 0.0
    
            self.addChild(ball)
            ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
        }
    }