Я некоторое время боролся с этой проблемой, которая, похоже, глубоко погружена в физический движок spritekit.Физика спритекита и сглаживание камеры
Мой первый вопрос: будет ли Spritekit обрабатывать свои физические обновления в другом потоке, чем в основном потоке?
У меня есть «мировой» узел в сцене, который я перемещаю, чтобы имитировать «камеру». Таким образом, я могу центрировать «камеру» на моем игровом узле. Так как игрок прыгает вверх и вниз много, я хочу сгладить камеру. Без сглаживания камеры проблем нет. Но когда я добавляю камеры разглаживание, как таковой: (этот код вызывается из didFinishUpdate
)
CGPoint ptPosition = self.position;
float fSmoothY = m_fLastCameraY + (ptPosition.y - m_fLastCameraY) * 0.1;
CGPoint pointCamera = [self.scene convertPoint:CGPointMake(ptPosition.x, fSmoothY) fromNode:self.parent];
[gameScene centerOnPoint:pointCamera];
m_fLastCameraY = fSmoothY;
Если я позвоню приведенный выше код из didSimulatePhysics
, он делает ту же самую вещь. Он заикается всякий раз, когда падает (из-за сглаживания Y-камеры).
При проектировании вы можете видеть, что игрок Y (красная линия) заикается по ходу кадров.
Как я могу это исправить, или работать вокруг него, если он не может быть по-настоящему «фиксированный»?
Вы построили это на устройстве или симуляторе? Вы использовали NSLog для создания данных графика? Если это так, попробуйте избежать этого, потому что ведение журнала добавляет служебные данные, вместо этого собирайте данные в массиве и запишите их после завершения теста. Попробуйте переместить узел с действием перемещения (отключите физику), чтобы увидеть, действительно ли эффект действительно связан с физикой. И следить за частотой кадров, чтобы увидеть, может ли частота кадров колебаться всякий раз, когда есть разница. – LearnCocos2D
@ LearnCocos2D Я тестировал это на iPad Mini, iPad 3 и даже iPhone 5C. Я использовал «NSLog» для построения графика (в Документах Google), но я уверен, что результаты будут одинаковыми, если не будут активно регистрировать данные. Дельта-время в основном такое же (я наметил его раньше, чтобы увидеть его подробно), поэтому я уверен, что FPS плавный: http://i.imgur.com/xhb6ZNp.png – Codecat
@ LearnCocos2D Иногда заикание не происходит Случается, и иногда это происходит. Это похоже на шанс 50/50, что заставляет меня думать, что физика проводится параллельно с регулярными обновлениями игры. – Codecat