Уменьшение переменной во время касания экрана - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу уменьшить счет, пока к экрану прикасается Swift, и я не уверен, какой способ лучше всего для этого добиться.

Размещение:

score -= 1

в прикосновениях, очевидно, началосьуменьшает его при прикосновении к экрану, но мне нужно, чтобы он делал это все время, пока к нему прикоснулись.

Я попытался создать SKAction для запуска кода выше навсегда в touchSegan, а затем удалить действие в touchesEnded,Это просто вызвало зависание приложения.

Я знаю, что это должно быть легко, но любая помощь приветствуется.

1 Ответ

0 голосов
/ 15 сентября 2018

Установите флаг в touchesBegan, чтобы указать, что к экрану прикоснулись:

screentouched = true

, а затем сбросьте флаг в touchesEnded, чтобы показать, что экран недольше трогается:

screenTouched = false

В update, если screenTouched равно true, уменьшите ваш счет

if screenTouched { score -= 1 }

Хотя это приведет к уменьшению счета до 60 раз в секунду, так что вы, вероятно, захотите ограничить время.Для этого необходимо иметь 2 свойства типа TimeInterval, которые отслеживают, сколько времени прошло с момента последнего уменьшения оценки, и как часто следует уменьшать оценку:

  var timeOfLastScoreDecrement: CFTimeInterval = 0.0
  var timePerScoreDecrement: CFTimeInterval = 1.0

Для этого примера мыЯ буду уменьшать счет каждую секунду и устанавливать время с последнего уменьшения на 0, поскольку это еще не произошло.

В update: вызовите функцию, которая проверяет, прошел ли временной интервал.Если это так, то уменьшите счет и восстановите время с момента последнего уменьшения, а если нет, то:

override func update(_ currentTime: TimeInterval) {
   if screenIsTouched {decrementScoreForTime(currentTime)}
   // Rest of update code
   }

func decrementScoreForTime(_ currentTime: CFTimeInterval) {
   if (currentTime - timeOfLastScoreDecrement < timePerScoreDecrement) {return}
   // Time per score decrement has passed...
   score -= 1
   timeOfLastScoreDecrement = currentTime
   }
...