Swift - 添加物理实体时如何修复从场景中删除精灵节点

时间:2015-02-15 02:59:21

标签: swift physics

我对编程很新,似乎无法弄清楚这个物理世界的问题。当我向我的精灵节点添加一个物理体时,我再也看不到场景中的精灵节点了。

代码:

func createBird() {

    let randomSpawn = Int(arc4random_uniform(2))

    if randomSpawn == 1 {
    let newX = Int(-20)
    let newY = Int(arc4random_uniform(500) + 300)
    var p = CGPoint(x: newX, y: newY)
    var destination = CGPoint(x:Int(self.frame.width+21), y:newY)

    var moverSpeed = Int(arc4random_uniform(5) + 3)

   let birdRight = SKSpriteNode (imageNamed: "bird-right1")
    birdRight.xScale = 0.6
    birdRight.yScale = 0.6
    birdRight.position = p
    birdRight.zPosition = 2

    //birdRight.physicsBody = SKPhysicsBody(rectangleOfSize: birdRight.size)
    birdRight.physicsBody?.dynamic = true
    birdRight.physicsBody?.categoryBitMask = birdCategory
    birdRight.physicsBody?.contactTestBitMask = ballCategory
    birdRight.physicsBody?.collisionBitMask = 0

    let birdMoveRight = SKAction.animateWithTextures([
        SKTexture(imageNamed: "bird-right1"),
        SKTexture(imageNamed: "bird-right2"),
        SKTexture(imageNamed: "bird-right3"),
        SKTexture(imageNamed: "bird-right4"),
        SKTexture(imageNamed: "bird-right5"),
        SKTexture(imageNamed: "bird-right6"),
        SKTexture(imageNamed: "bird-right7"),
        SKTexture(imageNamed: "bird-right8"),
        SKTexture(imageNamed: "bird-right9"),
        SKTexture(imageNamed: "bird-right10")
        ], timePerFrame: 0.05)

   let foreverAction = SKAction.repeatActionForever(birdMoveRight)

    birdRight.runAction(foreverAction)

    let duration = NSTimeInterval(moverSpeed)

    let action = SKAction.moveTo(destination, duration: duration)

    birdRight.runAction(action)

    addChild(birdRight)


    }

    else {

        let newX = Int(self.frame.width+20)
        let newY = Int(arc4random_uniform(500) + 300)
        var p = CGPoint(x: newX, y: newY)
        var destination = CGPoint(x:-21, y:newY)

        var moverSpeed = Int(arc4random_uniform(5) + 3)

        let birdLeft = SKSpriteNode(imageNamed: "bird-left1")
        birdLeft.xScale = 0.6
        birdLeft.yScale = 0.6
        birdLeft.position = p
        birdLeft.zPosition = 2

        let birdMoveLeft = SKAction.animateWithTextures([
            SKTexture(imageNamed: "bird-left1"),
            SKTexture(imageNamed: "bird-left2"),
            SKTexture(imageNamed: "bird-left3"),
            SKTexture(imageNamed: "bird-left4"),
            SKTexture(imageNamed: "bird-left5"),
            SKTexture(imageNamed: "bird-left6"),
            SKTexture(imageNamed: "bird-left7"),
            SKTexture(imageNamed: "bird-left8"),
            SKTexture(imageNamed: "bird-left9"),
            SKTexture(imageNamed: "bird-left10")
            ], timePerFrame: 0.05)

        birdLeft.physicsBody = SKPhysicsBody(rectangleOfSize: birdLeft.size)
        birdLeft.physicsBody?.dynamic = false
        birdLeft.physicsBody?.categoryBitMask = birdCategory
        birdLeft.physicsBody?.contactTestBitMask = ballCategory
        birdLeft.physicsBody?.collisionBitMask = 0

        let foreverAction = SKAction.repeatActionForever(birdMoveLeft)

        birdLeft.runAction(foreverAction)

        let duration = NSTimeInterval(moverSpeed)

        let action = SKAction.moveTo(destination, duration: duration)

        birdLeft.runAction(action)
        addChild(birdLeft)

    }
}

1 个答案:

答案 0 :(得分:0)

也许它会受到重力的影响并在您甚至在屏幕上看到对象之前被完全拖下来? 试试这个:

  birdRight.physicsBody?.affectedByGravity = false