質問: Swift3&SpriteKitを使って、スーパーマリオのクローンを作成しています。 タイルマップを利用して「地面の各タイル(テクスチャ)」に物理設定を施しているのですが、下記A、Bのパターンで検証したところ、それぞれ次の問題が発生してしまいます。 #### A. 地面をボリュームベース(rectangleOf)の剛体にした場合 * タイルとタイルの境界でプレイヤーが引っかかり、停止してしまう。 ※参考:フレームレートは60fpsで安定 #### B. 地面をエッジベース(edgeLoopFrom)の剛体にした場合 * プレイヤーが地面から僅かに浮いてしまう。 * 画面スクロールがカクカクしてしまう。 ※参考:フレームレートは59〜60.2fpsなど安定しない ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/5ec9c0d54a81875daca402167426f213.png) #### ご教授願いたいこと 【質問1】 剛体(SKPhysicsBody)の特性的に、ボリュームベースよりエッジベースの方が動作負荷が低くなるという情報を幾つか見かけたのですが、そうではなく、エッジベースの方が動作負荷が高いものでしょうか? 【質問2】 エッジベースの場合にプレイヤーが僅かに浮いてしまうのはなぜでしょうか? #### 補足情報 * プレイヤーの剛体を「円」にすることでパターンA(ボリュームベース)でも引っかからないようにできると理解していますが、今回はプレイヤーをブロックの端っこに立たせたり、衝突時の挙動を本物に近づけたいため、できれば「矩形」もしくは「角の丸い矩形」でいきたいと考えています。 * 今回のサンプルソースを下記GitHubへアップしてあります。 GameScene.swiftの「135行」と「138行」のコメントアウトを付け替えることで、A/Bの切り替えが行えます。挙動確認にどうぞ。 https://github.com/konsukeyama/GameApp_proto2
回答: 「質問1」については、公式のドキュメントを(翻訳しながら頑張って)読んだところ、エッジベースの方が負荷が高いということが分かりました。勉強不足でした。 https://developer.apple.com/documentation/spritekit/skphysicsbody 「質問2」のついてはまだ分かっていません。