Ios 在update()中按下按钮时,如何生成一个int秒计数器?
我正在尝试制作第二个计数器,该计数器在GameSecene.update()中运行,当我按下按钮最多5秒时计数,然后停止并重置为0,等待再次按下按钮 这是我的if按钮被按下的代码:Ios 在update()中按下按钮时,如何生成一个int秒计数器?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在尝试制作第二个计数器,该计数器在GameSecene.update()中运行,当我按下按钮最多5秒时计数,然后停止并重置为0,等待再次按下按钮 这是我的if按钮被按下的代码: override func update(currentTime: CFTimeInterval) { if (Data.gameScene.buttonPressed == true) { player.texture = SKTexture(imageNamed: "Spaceship2
override func update(currentTime: CFTimeInterval) {
if (Data.gameScene.buttonPressed == true) {
player.texture = SKTexture(imageNamed: "Spaceship2")
player.physicsBody = nil
}
}
正如你所看到的,当按下按钮时,播放器就看不见了(太空船2的透明度很低),它不再有物理实体(所以敌人不能击中它)
我想要的是(在伪代码中):
if(按下按钮==true){
启动计时器
如果计时器<5秒{
玩家不能被击中,并且是隐形的
}否则{
玩家可以被击中并且是可见的
}
}
有人能帮我吗 只需设置一个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
...
}
}
希望您能理解。由于定期调用
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 = ...
}
}
}
您可以通过一系列等待操作和运行块操作来实现这一点
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)
}
}
谢谢,这很有道理!但是,SKSpriteNode中不存在player.isInvisible和player.startInvisible。您是否假设这些已经是自定义函数?@DanTdd我假设您将创建一个具有附加属性的SKSpriteNode子类。这将允许多个游戏对象同时进入不可见模式(每个都有自己的时间戳)。但是,如果只允许一个节点(玩家的飞船)不可见,那么属性可能是场景的属性。嗯,不太清楚你的意思:(这是我的第一场比赛,我对这一切都很陌生。无法让它工作谢谢,我将在哪里调用按钮按下?太棒了,非常感谢!几乎可以正常工作!我现在的问题是我如何使玩家隐形,因为我正在使玩家物理体为零。当我重新启用它时,碰撞将不再工作。你知道一种隐藏pl的击球手方法吗那么它就不会碰撞了?别担心@akmidd我最后把玩家类别的位掩码改成了敌人5秒钟,然后又回到了玩家身上。
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)
}
}