SpriteKit と Swift を使用して iOS 向けのプラットフォーム ゲームを計画しています。プレイヤー スプライトの衝突を処理する方法について調査したところ、この記事にたどり着きました。
http://www.learn-cocos2d.com/2013/08/physics-engine-platformer-terrible-idea/
その記事では、SpriteKit のビルトイン物理エンジンを使用するのではなく、移動、ジャンプ、衝突処理などを独自に実装するようアドバイスしています。Ray Wenderlichs サイトのプラットフォーム チュートリアルでは、同様のアプローチが提案されています。
ここまでは良かったのですが、プレイヤーが立つことができる床タイルについて話しましょう。CGRectIntersectsRect を使用して衝突を検出するため、タイルが長方形で平面 (Ray Wenderlich のチュートリアルのように) である限り、カスタムの物理演算の実装は簡単です。しかし、湾曲したタイルや傾斜したタイルでプレイヤーの衝突を確認するにはどうすればよいでしょうか? 私が読んだことから、CGRectIntersectsRect はスプライト矩形内の透過ピクセルを考慮していません。
http://i.stack.imgur.com/lRP2Q.png
たとえば、上のタイルを見てください。白い領域 (左上) は透明になります。ここで、プレイヤー スプライトがこのタイルにドロップすると、タイルの四角形の上部の境界で衝突が検出されますが、そこには地面のピクセルはありません (青い領域、右下)。したがって、最終的にプレイヤーはこのタイルの上に空中でホバリングします。プレイヤー スプライトを数ピクセル下に押し下げることもできますが、それは少しハックであり、湾曲した床タイルの傾斜角度が異なる場合はさらに難しくなります。
問題は、これらのタイプの衝突を SpriteKit だけで (Cocos2D、Kobold Kit などの追加のフレームワークなしで) どのように処理できるかということです。それとも、このアプローチは完全に間違っており、SpriteKit を使用したプラットフォーマーでの衝突は根本的に異なるものにする必要がありますか?
どんな助けでも大歓迎です!