Значительное количество кадров в секунду падает при приостановке просмотра в 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 приостанавливает физическое моделирование.