Почему моя функция обновления занимала бы 85% времени, если бы я оставил поле пустым?

Я немного сбит с толку при профилировании своего приложения. Я заметил, что по мере того, как это происходит, загрузка ЦП увеличивается, но я не уверен, почему. Даже когда игрок простаивает, кажется, что загрузка ЦП составляет 72% от [SKScene _update:]. Моя функция обновления пуста, потому что моя игра пошаговая, так почему же здесь столько всего происходит?

Любые советы будут оценены.

введите здесь описание изображения

В случае необходимости это мой метод обновления:

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered
}

Дополнительная информация:

Основная игровая карта - это шестнадцатеричная SKTileMapNode с пользовательским интерфейсом, нарисованным с использованием SKCameraNode. Пользовательский интерфейс состоит из примерно 30 узлов, включая SKLabelNode и SKSpriteNode. Есть ИИ, который запускается в отдельном потоке каждый раз, когда пользователь заканчивает свой ход. Когда ИИ запускается, использование ЦП основного потока мгновенно падает, как показано на изображении выше. Это странно, потому что AI выполняет только функцию GKMinMaxStrategist bestMoveForPlayer().


person Aleksandr    schedule 25.12.2017    source источник


Ответы (1)


Возможно, вы вручную вызываете update(_:), который, по очереди, снова вызывает update(_:), вам следует переопределить этот метод, чтобы обновить сцену, даже если у вас есть пустая реализация. Убедитесь, что вы установили SKSceneDelegate вашей сцены.

Не вызывайте этот метод напрямую; он вызывается ровно один раз для каждого кадра, пока сцена отображается в виде и не приостанавливается. По умолчанию этот метод ничего не делает. Подкласс сцены должен переопределить этот метод и выполнить все необходимые обновления сцены.

вы также можете приостановить / возобновить просмотр вручную:

 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let view = view else {
        return
    }

    view.paused = !view.paused
}
person RLoniello    schedule 25.12.2017
comment
Я определенно переопределил обновление и оставил его пустым. Кроме того, какое именно отношение к этому имеет SKSceneDelegate? - person Aleksandr; 25.12.2017
comment
все методы обработки сцены могут быть делегированы с помощью SKSceneDelegate, без соответствующего кода я не мог бы сказать, подклассифицируете ли вы и реализуете ли вы свой собственный делегат. попробуйте приостановить просмотр, когда ход игрока закончился, и обновить его до его начала. - person RLoniello; 25.12.2017
comment
Поэтому я явно никогда ничего не делаю с SKSceneDelegate. Я не обращаюсь к нему и не работаю с его функциями. Я нигде не вызываю update вручную, и приостановка просмотра приводит к поражению цели, поскольку пользователь не может делать никаких ходов. - person Aleksandr; 25.12.2017
comment
Я понимаю, вы запускаете какие-либо циклы в основном потоке, которые могут вызвать обновление сцены / представления. - person RLoniello; 25.12.2017
comment
Что могло бы быть примером такой петли? Я не верю, что у меня что-то работает, пока игрок не выполнит сенсорный ввод. - person Aleksandr; 25.12.2017
comment
Я спрашиваю, потому что мне кажется, что вы создаете одноразовый ресурс, который добавляется к contiguous array для сцены, а затем выпускается ARC Возникает ли эта проблема на устройстве, а также на симуляторе? это может быть просто какой-то творог из симуляторов ARC. - person RLoniello; 25.12.2017
comment
Я только тестировал устройство, поэтому считаю, что данные точные. Обычно при работе в течение длительного времени загрузка ЦП увеличивается с течением времени по мере прохождения очередей. Кажется, что contiguous array сохраняется как большая часть процессорного времени. Это какие-то данные SKTexture? - person Aleksandr; 25.12.2017
comment
возможно, если вы не используете группу, наложение текстуры может потребовать большого количества процессоров / графических процессоров, но это отразится на вашем fps. - person RLoniello; 25.12.2017
comment
Мой счетчик FPS остается довольно стабильным на 60, розыгрыши доходят до 100 или около того. Но это вызывает беспокойство по поводу использования ЦП - person Aleksandr; 25.12.2017