Как мне справиться с множеством функций в обработчике Swift startDeviceMotionUpdates?

#swift #xcode #core-motion

Вопрос:

Это мой первый пост здесь, так что, надеюсь, я делаю это правильно. Итак, в настоящее время я создаю игру для рыбалки с основным фреймворком движения, используя Swift 5. Та часть, с которой я сейчас борюсь, такова startDeviceMotionUpdates(to: queue) { ...code...} .

 var i = 1
while (i < 5) {

    ...

    manager.startDeviceMotionUpdates(to: queue) {
        (data, error) in
                    
        guard let data = data, error == nil else {
            return
        }
                    
        if (data.userAcceleration.z < -1.5) {
            print("snap")
            i  = 1
            print(i)
        }
    }
}
 

В настоящее время у меня есть это, так что, когда я щелкаю телефоном вниз, он выводит «щелчок» и номер на консоль. Однако я хотел бы изменить спрайт так, чтобы рыбак выглядел так, как будто он забрасывает удочку. Итак, я попытался заменить print("snap") на self.fisher = SKSpriteNode(texture: fisherTextures[1]) , но это не совсем работает. Он по-прежнему печатает «привязку» к консоли, но спрайт остается тем же, когда приложение запущено. Как мне это исправить?

Кроме того, помимо изменения спрайта, когда телефон привязан вниз, я хотел бы сделать некоторые другие вещи, такие как позволить пользователю привязывать телефон вверх, когда поймана рыба. Но, похоже, это также должно быть сделано внутри блока/обработчика. В этом случае в нем будет приличное количество кодов. Это нормально? Есть ли какой-то другой чистый способ сделать это?

Наконец, кажется, что, как только он находится внутри блока/обработчика startDeviceMotionUpdates, он не выходит из него. У меня есть цикл while, настроенный на запуск от 1 до 5, но я вижу, что «я» увеличивается более чем на 5 в консоли.

О, и было бы действительно здорово, если бы вы могли порекомендовать мне какой-нибудь пример кода/статьи для чтения для Core Motion Framework.

TL;DR:

  1. Похоже, что обновление спрайта не работает внутри обработчика startDeviceMotionUpdates. Какие-нибудь исправления?
  2. Нормально ли иметь много функций внутри обработчика startDeviceMotionUpdates?
  3. Похоже, я не могу выйти из startDeviceMotionUpdates, как только я войду?
  4. Есть ли хороший пример кода/статьи для чтения в рамках Core Motion?

Спасибо!

Комментарии:

1. Криск, ТАК что лучше всего работает, если вы задаете один вопрос за пост, несколько вопросов часто игнорируются.