将此操作实施到我的 Sprite-Kit 游戏中的正确方法是什么?

What is the correct way to implement THIS action into my Sprite-Kit Game?

我有一个 birdNode(spriteNode) 在肖像场景中水平移动。

birdNode 正在向屏幕底部的 cgPoint 投放一个蛋(spriteNode)。

我希望 birdNode 在任何 time/position.

处随机掉落他的蛋

我考虑过创建一个 NSTimeInterval,其随机数在 2 秒(birdNode 穿过屏幕所需的时间)之间,使 eggNode 在 birdNode 位置生成,并调用 dropEgg 函数。

我也考虑过随机生成一个CGPoint,在

加载eggNode
birdNode.position.x = randomPoint

然后调用 dropEgg 函数。

我的问题是我应该使用某种方法而不是另一种方法吗?我究竟应该在哪里调用 dropNode 函数。现在我无法让它工作。

我尝试在下面的 currentTime 更新函数中考虑 randomTime/randomPosition 并删除节点,但它会在每一帧渲染时生成鸡蛋,所以我认为那不是正确的方法。

override func update(currentTime: CFTimeInterval) {
}

这是我的代码,用于放下鸡蛋、创建随机 dropPoint 浮点数以及飞过屏幕的鸟。

    func dropEgg(){

    //aim
    let dx = eggNodeTarget.position.x - birdNode.position.x
    let dy = eggNodeTarget.position.y - birdNode.position.y
    let angle = atan2(dy, dx)
    dragonProjectileNode.zRotation = angle

    //Seek
    var vx = turretNode.position.x
    var vy = turretNode.position.y

    //creates eggNodeSprite
    loadEggNode()  

    //shoot
    let shootAction = SKAction.moveTo(CGPointMake(vx, vy),duration: 0.75)
    eggNode.runAction(shootAction)

}

func loadRandDropLocationX() -> CGFloat{

    //or minNodeTimeValue?
    var MinNodeSpawnValue = self.frame.size.width * 0.2

    //or maxNodeTimeValue?
    var MaxNodeSpawnValue = self.frame.size.width * 0.8

    //or randomTime?
    var randomPointUInt32 = UInt32(MaxSpawnValue - MinSpawnValue)
    return (CGFloat(arc4random_uniform(randomPointUInt32)) + MinNodeSpawnValue)
}

func dragonMoveRight(){
    let moveDragon = SKAction.moveTo(loadRandDestinationRight(), duration: 2.3)
    dragonNode.runAction(moveDragon)
}

使用NSTimer每2秒调用一次dropEgg()

喜欢:

NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(dropEgg), userInfo: nil, repeats: true)