Spawn SKSprite в случайных позициях

Я делаю игру, и мне нужно, чтобы "хмурый" появлялся в случайных местах на экране, а затем проваливался.

У меня он появляется, но только в одном разделе, и он больше не будет появляться:

}

func random() -> CGFloat {
    return CGFloat(Float(arc4random()) / 0xFFFFFFFFFFFFF)
}

func random(#min: CGFloat, max: CGFloat) -> CGFloat {
    return random() * (max - min) + min
}

func addFrowny() {

    let frowny = SKSpriteNode(imageNamed: "Frowny")

    let actualX = random(min: frowny.size.width/2, max: size.width + frowny.size.height/2)

    frowny.position = CGPoint(x: actualX, y: size.width - frowny.size.height/2)

    addChild(frowny)


    let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0))


    let actionMove = SKAction.moveTo(CGPoint(x: actualX, y: +frowny.size.height/2), duration: NSTimeInterval(actualDuration))
    let actionMoveDone = SKAction.removeFromParent()
    frowny.runAction(SKAction.sequence([actionMove, actionMoveDone]))

1 ответ

Ваш random Метод не возвращает значение между 0 и 1, а, скорее, что-то вроде 0,00000001 каждый раз. Используйте эту случайную функцию вместо:

func random() -> CGFloat {
    return CGFloat(Double(arc4random()) / Double(UInt32.max))
}

(Вы делите слишком много, гекс не должен использоваться, когда это сбивает с толку)

Другие вопросы по тегам