Swift:在一定范围内随机生成敌人?
Posted
技术标签:
【中文标题】Swift:在一定范围内随机生成敌人?【英文标题】:Swift: spawn enemies at random times within a range? 【发布时间】:2015-07-09 04:35:49 【问题描述】:好吧,我知道这个问题已经回答了那些用其他几种语言提出问题的人,但似乎还没有人要求使用 Swift。
我正在创建一个精灵套件游戏,我需要随机生成我的敌人(在 0-2 秒范围内)。现在我让他们使用延迟每秒生成一次。这是敌人生成函数:
func spawnEnemy1()
var enemy1Texture = SKTexture(imageNamed: "enemy1")
enemy1 = SKSpriteNode(texture: enemy1Texture)
enemy1.setScale(0.3)
enemy1.name = "enemy1"
enemy1.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 1.2)
enemy1.zPosition = 55
var enemyPhysicsSize = CGSize(width: enemy1.size.width,height: 65)
enemy1.physicsBody = SKPhysicsBody(rectangleOfSize: enemyPhysicsSize)
enemy1.physicsBody?.dynamic = false
enemy1.physicsBody?.categoryBitMask = ColliderType.Enemy1.rawValue
enemy1.physicsBody?.contactTestBitMask = ColliderType.Savior.rawValue
enemy1.physicsBody?.collisionBitMask = ColliderType.Savior.rawValue
self.addChild(enemy1)
let enemyMoveDown = SKAction.moveTo(CGPointMake(self.size.width * 0.5,-100), duration:5.6)
let scaleEnemy = SKAction.scaleTo(0.5, duration: 5.6)
let enemyScaleDown = SKAction.group([enemyMoveDown, scaleEnemy])
enemy1.runAction(enemyScaleDown)
这里正在执行生成函数:
let enemy1SpawnDelay = SKAction.waitForDuration(1)
runAction(SKAction.repeatActionForever(
SKAction.sequence([
enemy1SpawnDelay,
SKAction.runBlock(self.spawnEnemy1()),
SKAction.waitForDuration(5.6)])))
(我不希望屏幕上同时出现多个敌人,敌人从屏幕上向下移动需要 5.6 秒,因此是最后的延迟)。
enemy1SpawnDelay
控制从最后一个敌人出现到下一个敌人出现之间的时间间隔,所以我需要知道如何将enemy1SpawnDelay
设置为等于 0 之间的新随机数-2 每次生成一个敌人。
我该怎么做?或者有没有更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:利用 arc4random 返回一个介于 0 到您的数字之间的随机值
spawndelay = arc4random_uniform(UInt32(yournumber))
对于来自here的双倍
func random(#lower: Double, upper: Double) -> Double
let r = Double(arc4random(UInt64)) / Double(UInt64.max)
return (r * (upper - lower)) + lower
【讨论】:
我需要双精度,而不是整数。你能看看我最近的问题吗?以上是关于Swift:在一定范围内随机生成敌人?的主要内容,如果未能解决你的问题,请参考以下文章