Xcode 如何阻止对SKSprtieNode应用力?

Xcode 如何阻止对SKSprtieNode应用力?,xcode,swift,sprite-kit,sknode,Xcode,Swift,Sprite Kit,Sknode,我有两个小桨并排排列,大小约为50x10,不断地从左到右、从右到左移动,这也会不时地随机停止移动,变得静止不动。有一个球朝着他们落下,当碰到一个桨时,如果它不移动并且静止,球会从上面反弹并直接返回。但是,如果在这段时间内,球拍在移动,球碰到其中一个球拍,而不是球碰到球拍并向右返回,则球会碰到球拍并在返回时开始向右或向左移动(取决于球拍移动的方向)。我试着让球向上移动,即使它在移动时碰到了球拍(几乎是一个永远在球拍上弹跳的球) 我尝试了几种不同的方法来解决这个问题,但我认为我遗漏了一些重要的东西,

我有两个小桨并排排列,大小约为50x10,不断地从左到右、从右到左移动,这也会不时地随机停止移动,变得静止不动。有一个球朝着他们落下,当碰到一个桨时,如果它不移动并且静止,球会从上面反弹并直接返回。但是,如果在这段时间内,球拍在移动,球碰到其中一个球拍,而不是球碰到球拍并向右返回,则球会碰到球拍并在返回时开始向右或向左移动(取决于球拍移动的方向)。我试着让球向上移动,即使它在移动时碰到了球拍(几乎是一个永远在球拍上弹跳的球)

我尝试了几种不同的方法来解决这个问题,但我认为我遗漏了一些重要的东西,让它像这样运行。代码如下:

class GameScene: SKScene, SKPhysicsContactDelegate {
        let greenPaddle = SKSpriteNode(imageNamed: "Green")
        var ball = SKSpriteNode()

        let ballCategory: UInt32 = 1 << 0
        let greenPaddleCategory: UInt32 = 1 << 1

        override func didMoveToView(view: SKView) {

            self.physicsWorld.contactDelegate = self

            greenPaddle.position = CGPoint(x: 0, y: frame.size.height / -6.5)
            greenPaddle.physicsBody = SKPhysicsBody(rectangleOfSize: greenPaddle.size)
            greenPaddle.physicsBody!.affectedByGravity = false
            greenPaddle.physicsBody!.dynamic = false

            greenPaddle.physicsBody!.categoryBitMask = greenPaddleCategory
            greenPaddle.physicsBody!.contactTestBitMask = ballCategory


          ball = SKSpriteNode(imageNamed: "Red")
          ball.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
          ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.height / 2)
          ball.physicsBody!.friction = 0
          ball.physicsBody!.restitution = 1
          ball.physicsBody!.linearDamping = 0
          ball.physicsBody!.allowsRotation = false

         ball.physicsBody!.categoryBitMask = ballCategory
         ball.physicsBody!.contactTestBitMask = greenPaddleCategory

         addChild(circle)
    }

    func didBeginContact(contact: SKPhysicsContact) {

        let bodyA = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyA : contact.bodyB
        let bodyB = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyB : contact.bodyA

        if (bodyA.categoryBitMask) == ballCategory && (bodyB.categoryBitMask) == greenPaddleCategory {

            greenPaddle.physicsBody!.friction = 0
            greenPaddle.physicsBody!.restitution = 0  
    }

}
类游戏场景:SKScene,skphysiccontactdelegate{
让Greenbail=SKSpriteNode(图像名为“绿色”)
var ball=SKSpriteNode()

让我们来看看ballcegory:UInt32=1我并不真正理解这个问题;但是,您忘记了在didmovetoview中设置物理世界

 self.physicsWorld.contactDelegate = self

如果问题是触点不起作用,这将起作用:)

我有它,忘了在这里提到它。我正试图让球以直线(向下和向上)从桨上反弹。例如,如果球拍从左向右移动,且球在移动时撞击球拍,则球将在向右移动时向上移动,而不是笔直向上移动,如果这有意义的话