Не удается увеличить / увеличить 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
}