Значительное количество кадров в секунду падает при приостановке просмотра в Spritekit

Я заметил значительное падение fps (частота кадров между 5-10fps), когда не останавливал просмотр в SpriteKit. Я попробовал это с пустым проектом (шаблон игры Spritekit). Вот код:

if(!self.view.paused){
        self.view.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.view.paused = NO;
    }

Если я ставлю сцену на паузу, все работает как положено, и кадры стабильны на скорости 60 кадров в секунду. Я проверяю это на устройстве.

if(!self.paused){
        self.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.paused = NO;
    }

Это может создать проблемы с геймплеем, когда он не используется, потому что некоторые кадры будут пропущены... Есть мысли, что происходит?

1 ответ

Решение

Я предполагаю, что он временно падает после бездействия? Или это всегда низкий fps после бездействия. Это происходит только на iOS 8 или iOS 9. Можете ли вы попробовать iOS 9? Я убежден, что это может произойти, потому что после не приостановки Sprite-Kit требуется немного, чтобы "прогреть" цикл рендеринга. Вы можете попробовать профилирование инструментов и посмотреть, что происходит.

Что касается решения, вы можете попробовать понизить speed вашей SKPhysicsWorld временно, после остановки, поэтому физика не прыгает, потому что у Sprite Kit есть переменный временной шаг, и, к сожалению, это не может быть изменено. Если это прыжковые действия, вы можете попробовать опустить speed вашей SKScene, В идеале вы должны, вероятно, сделать оба.

Кроме того, если вам нужно беспокоиться только о действиях, вы можете попытаться приостановить только вашу сцену вместо SKView (но помните, что ваш метод обновления будет работать). Или попробуйте временно приостановить сцену, а затем приостановить ее после того, как SKView не сделал паузу.

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

Ниже приведена ссылка на класс для всех этих свойств.

SKView-пауза

Если значение YES, содержимое сцены фиксируется на экране. Никакие действия не выполняются и физическое моделирование не выполняется.

SKScene - скорость

По умолчанию установлено значение 1.0, что означает, что все действия выполняются с нормальной скоростью. Если вы установите другую скорость, время будет работать быстрее или медленнее для всех действий, выполняемых на узле и его потомках. Например, если вы установите значение скорости 2,0, действия будут выполняться в два раза быстрее.

SKScene - приостановлено

Если значение YES, узел (и все его потомки) пропускаются, когда сцена обрабатывает действия.

SKPhysicsWorld - скорость

По умолчанию установлено значение 1,0, что означает, что симуляция выполняется с нормальной скоростью. Значение, отличное от значения по умолчанию, изменяет скорость, с которой время проходит в симуляции физики. Например, значение скорости 2,0 указывает, что время в симуляции физики проходит в два раза быстрее, чем время симуляции сцены. Значение 0,0 приостанавливает физическое моделирование.

Другие вопросы по тегам