如何在继续操作之前连续检查是否按下了某个键?

时间:2019-03-23 17:01:21

标签: ios swift sprite-kit

我试图不断检查是否按下了一个键。一旦完成,我想运行一段代码。到目前为止,我正在尝试执行以下操作:

func someFunctionCall {
  //do stuff here
  //check until key is pressed
  while(!spacePressed) {
    if(spacePressed) {
      //do more stuff in here
    }
  }
} 

这是我检测按键的地方:

public override func keyDown(with event: NSEvent) { 
     switch Int(event.keyCode) {
     case kVK_Space:
    spacePressed = true
     default:
    break
     }
}

public override func keyUp(with event: NSEvent) {   
     switch Int(event.keyCode) {
     case kVK_Space:
    spacePressed = false
     default:
    break
     }
}

我希望while循环不断检查按键是否发生。当我运行程序时,它会在while循环开始时冻结(我假设它陷入了无限循环)。这是解决问题的正确方法吗?

1 个答案:

答案 0 :(得分:0)

似乎您的“主线程”正在连续执行循环,因此无法执行其他指令。

因此,当您的空间不足时,您可以调用函数。

类似这样的东西:

var timer:Timer?   

func someFunctionCall() {
   // do exterior loop stuff here
} 




func didSpaceDown(){
timer =  Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { (timer) in
       //Do your inside loop stuff here
    }
}

 override func keyDown(with event: NSEvent) { 
     if Int(event.keyCode) == KVK_Space{
             didSpaceDown()
         }
 }

 override func keyUp(with event: NSEvent) {   
          if Int(event.keyCode) == KVK_Space{
            timer.invalidate()
         }
 }

尝试并告诉我。我不确定这是否适合您。