この質問を投稿して以来、多くの新しい情報を発見したので、完全に書き直しました。
タイルベースのゲームで重力とジャンプを実装しているときに、いくつかの問題に遭遇しました。キャラクターがジャンプ後にタイルの間に着地すると、キャラクターがタイルをすり抜けて落ちることがあります。
最大速度はタイル サイズと同じであるため、速度が速すぎることは確かに問題ではありません。また、キャラクターがジャンプするたびに問題が発生することはありません。多くの場合、ジャンプして最大速度に達し、それでもうまく着地できます。しかし、時にはキャラクターがただ失敗することもあります。
私のレベルはタイルのレイヤーで構成されています。各レイヤーには独自の衝突タイプがあります。したがって、同じレイヤー内のすべてのタイルは、衝突について同じルールに従います。私の現在の設定では、すべてのレイヤーがピクセルごとの衝突を使用しています。
これは、プレーヤーの座標を更新する方法です http://pastebin.com/qVc6gv6T
これは、衝突を計算するクラスです。 http://pastebin.com/7GqrFih6
更新では、次のことを行います。
controls.Update(player);
physicsEngine.HandleCollissions(levelManager, player);
問題は、衝突後にプレーヤーが別のタイルに移動したことが原因である可能性があると思います。他のタイルと衝突します。しかし、もう一方のタイルは既に衝突チェック済みなので、それはカウントされませんか? それとも、for ループの代わりに foreach を使用しているからでしょうか?