3

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 を使用したプラットフォーマーでの衝突は根本的に異なるものにする必要がありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

1

TMX マップを処理する JSTileMap と共に、曲線および傾斜した床タイルを処理するためにTiledというレベル エディタを利用できます。

湾曲した傾斜した床タイルとの接触を処理することができますが、それらのタイルの上に立っているオブジェクトの角度を調整するには、いくつかの数学関数を利用する必要があります。良い例はここにあります

SpriteKit の衝突検出を引き続き利用できます。これにより、物事が簡素化されますが、独自のジャンプまたは移動エンジンを作成できます。

于 2015-05-13T10:59:24.577 に答える