我正在尝试制作一个在GameScene.update()中运行的第二个计数器,当我按下一个按钮达5秒钟时计数,然后停止并重置为0等待按下另一个按钮。
这是我按下的if按钮代码:
override func update(currentTime: CFTimeInterval) {
if (Data.gameScene.buttonPressed == true) {
player.texture = SKTexture(imageNamed: "Spaceship2")
player.physicsBody = nil
}
}
正如你所看到的,当按下按钮时,玩家变得不可见(Spaceship2的低不透明度)并且它不再具有物理身体(因此敌人无法击中它)。
我想要的是这个(伪代码):
if (button pressed == true) {
start timer
if timer < 5 seconds {
player can't be hit and is invisible
} else {
player can be hit and is visible
}
}
有人可以帮我吗?
答案 0 :(得分:2)
您可以通过一系列等待操作和runBlock操作来完成此操作。
override func update(currentTime: CFTimeInterval) {
if (Data.gameScene.buttonPressed == true) {
//put code to make the player invisible
let waitAction = SKAction.waitForDuration(5)
let makePlayerVisibleAction = SKAction.runBlock {
//put code to make the player visible
}
let action = SKAction.sequence([waitAction, makePlayerVisibleAction])
player.runAction(action)
}
}
答案 1 :(得分:0)
只需设置一个在5秒后触发的计时器:
class MyViewController: UIViewController {
var timer: NStimer?
var timerIsRunning = false
func buttonPressed() {
if timerIsRunning {
return
}
// start the timer
self.timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: false)
self.timerIsRunning = true
player.texture = SKTexture(imageNamed: "Spaceship2")
player.physicsBody = nil
}
func update() {
self.timer?.invalidate()
self.timerIsRunning = false
...
}
}
希望你明白这一点。
答案 2 :(得分:0)
由于update
函数定期调用,并且方便地提供时间戳(以秒为单位),您只需在按下按钮时保存时间戳,并使用它来确定何时5秒完成了。
override func update(currentTime: CFTimeInterval) {
if (Data.gameScene.buttonPressed == true) {
player.texture = SKTexture(imageNamed: "Spaceship2")
player.physicsBody = nil
player.isInvisible = true
player.startInvisible = currentTime
}
else if (player.isInvisible){
if (currentTime - player.startInvisible > 5) {
player.isInvisible = false
player.texture = ...
player.physicsBody = ...
}
}
}