Как правильно реализовать ЭТО действие в моей игре Sprite-Kit?

У меня есть birdNode(spriteNode), путешествующий горизонтально по портретной сцене.

BirdNode сбрасывает яйцо (spriteNode) по направлению к cgPoint в нижней части экрана.

Я хочу, чтобы BirdNode случайным образом бросал свое яйцо в любое время/в любом месте.

Я подумал о создании NSTimeInterval со случайным числом между 2 секундами (время, которое требуется birdNode для перемещения по экрану), чтобы создать eggNode в позиции birdNode и вызвать функцию dropEgg.

Я также рассматривал возможность создания случайной точки CGPoint, загружая eggNode в

birdNode.position.x = randomPoint

а затем вызов функции dropEgg.

Мой вопрос в том, должен ли я использовать определенный подход вместо другого? Где именно я должен вызывать функцию dropNode. Прямо сейчас я не могу заставить его работать.

Я попытался рассмотреть randomTime/randomPosition в функции обновления currentTime ниже и удалить узел, но он создает яйца при рендеринге каждого кадра, поэтому я не думаю, что это правильный путь.

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

person Dean Sponholz    schedule 24.06.2016    source источник


Ответы (1)


Используйте NSTimer, чтобы вызывать dropEgg() каждые 2 секунды.

нравится:

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

person Valar Morghulis    schedule 24.06.2016