使用 NSTimer 生成 SkShapeNodes Swift
Spawning SkShapeNodes with NSTimer Swift
我正在用 sprite kit 创建一个游戏,我想以特定的时间间隔在屏幕上生成敌人。截至目前,代码 I 运行 在计时器应该执行其操作后立即崩溃,给我错误消息 Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)。这是我要执行的代码。
func randomElement() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies.count)))
return arrayOfEnemies[index] as! SKShapeNode
}
func randomElement2() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies2.count)))
return arrayOfEnemies2[index] as! SKShapeNode
}
func randomElement3() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies3.count)))
return arrayOfEnemies3[index] as! SKShapeNode
}
func randomElement4() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies4.count)))
return arrayOfEnemies4[index] as! SKShapeNode
}
let addEnemy = randomElement()
let addEnemy2 = randomElement2()
let addEnemy3 = randomElement3()
let addEnemy4 = randomElement4()
func addAllEnemies() {
self.addChild(addEnemy)
self.addChild(addEnemy2)
self.addChild(addEnemy3)
self.addChild(addEnemy4)
}
var Enemy = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(addAllEnemies()), userInfo: nil, repeats: true)
在游戏开始时,随机生成 4 个敌人并做他们应该做的事情。 3 秒后,当定时器被设置为重新启动功能时,游戏崩溃了。任何帮助,将不胜感激。谢谢!
每次添加敌人时都需要重新创建敌人。在方法中创建它们并制作副本应该会为您修复它。
func addAllEnemies() {
let addEnemy = randomElement().copy()
let addEnemy2 = randomElement2().copy()
let addEnemy3 = randomElement3().copy()
let addEnemy4 = randomElement4().copy()
self.addChild(addEnemy)
self.addChild(addEnemy2)
self.addChild(addEnemy3)
self.addChild(addEnemy4)
}
希望对您有所帮助。
如果您正在使用 Sprite-kit 创建游戏,那么在您的项目中集成计时器的最佳方式是使用 SKAction 而不是 NSTimer
SKAction.waitForDuration(some value)
如果你想让它永远重复自己也可以使用
SKAction.repeatActionForever(your action)
之后,您可以创建一个自定义函数,当定时器结束时通过 SKAction 调用。
我正在用 sprite kit 创建一个游戏,我想以特定的时间间隔在屏幕上生成敌人。截至目前,代码 I 运行 在计时器应该执行其操作后立即崩溃,给我错误消息 Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)。这是我要执行的代码。
func randomElement() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies.count)))
return arrayOfEnemies[index] as! SKShapeNode
}
func randomElement2() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies2.count)))
return arrayOfEnemies2[index] as! SKShapeNode
}
func randomElement3() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies3.count)))
return arrayOfEnemies3[index] as! SKShapeNode
}
func randomElement4() -> SKShapeNode! {
let index = Int(arc4random_uniform(UInt32(arrayOfEnemies4.count)))
return arrayOfEnemies4[index] as! SKShapeNode
}
let addEnemy = randomElement()
let addEnemy2 = randomElement2()
let addEnemy3 = randomElement3()
let addEnemy4 = randomElement4()
func addAllEnemies() {
self.addChild(addEnemy)
self.addChild(addEnemy2)
self.addChild(addEnemy3)
self.addChild(addEnemy4)
}
var Enemy = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(addAllEnemies()), userInfo: nil, repeats: true)
在游戏开始时,随机生成 4 个敌人并做他们应该做的事情。 3 秒后,当定时器被设置为重新启动功能时,游戏崩溃了。任何帮助,将不胜感激。谢谢!
每次添加敌人时都需要重新创建敌人。在方法中创建它们并制作副本应该会为您修复它。
func addAllEnemies() {
let addEnemy = randomElement().copy()
let addEnemy2 = randomElement2().copy()
let addEnemy3 = randomElement3().copy()
let addEnemy4 = randomElement4().copy()
self.addChild(addEnemy)
self.addChild(addEnemy2)
self.addChild(addEnemy3)
self.addChild(addEnemy4)
}
希望对您有所帮助。
如果您正在使用 Sprite-kit 创建游戏,那么在您的项目中集成计时器的最佳方式是使用 SKAction 而不是 NSTimer
SKAction.waitForDuration(some value)
如果你想让它永远重复自己也可以使用
SKAction.repeatActionForever(your action)
之后,您可以创建一个自定义函数,当定时器结束时通过 SKAction 调用。