#ios #swift #sprite-kit
#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:
Похоже, что ваш «Основной поток» постоянно выполняет ваш цикл, поэтому не может выполнить другие инструкции.
Таким образом, вы могли бы вызывать свою функцию, когда ваш пробел нажат.
Что-то вроде этого:
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()
}
}
Попробуйте и скажите мне. Я не уверен, работает ли это для вас.