Не удается увеличить / увеличить SKSpriteNode с присоединенными SKPhysicsJoints

Я хотел бы иметь возможность "увеличивать" и уменьшать масштаб в моей игре, однако, когда я масштабирую родительский "мировой" SKNode, соединения не масштабируются соответственно, так как они должны быть добавлены в SKScene (который является корневым узлом),

Изменение размера SKScene работает, однако любая графика HUD, которую я имею как дети, масштабируется вместе с ней.

Я рассмотрел создание своего HUD как ребенка SKView, но, похоже, он идет вразрез с рекомендациями Apple. Я также теряю преимущество от использования переходов SKScene, и вместо этого имею дело с многочисленными ViewControllers.

Любые предложения о том, как масштабировать SKSpriteNode и масштабировать его соединения вместе с ним?

1 ответ

Решение

Самый безопасный способ симулировать увеличение / уменьшение масштаба на узле мира - это масштабировать его. Однако, как вы заметили, масштабирование World Node нарушает физическое моделирование, потому что вы эффективно перемещаете и масштабируете все в стороне от SKScene. Таким образом, если вы масштабируете узел мира до 0,5 для имитации уменьшения масштаба, вы заметите, что гравитация имеет 2-кратный эффект, и все падает гораздо быстрее.

Решение состоит в том, чтобы всегда устанавливать мировой масштаб равным 1,0, прежде чем будет выполнено физическое моделирование, а затем изменить его обратно на то, что вы хотите увидеть, прежде чем оно будет визуализировано.

Я делаю это без каких-либо побочных эффектов, а делаю это с помощью обратных вызовов -didEvaluateActions и -didSimulatePhysics, например:

-didEvaluateActions
{
  [myWorld setScale:1.0];    // must be 1.0 before physics!
}

-didSimulatePhysics
{
   [myWorld setScale:worldScale];   // now set correctly for rendering
}
Другие вопросы по тегам