同じサイズのタイルで構成されるマップ上を移動できるボールがあります。プレイヤーは、より暗く、黒い境界線を持つタイルの上を歩けないようにする必要があります。どのタイルがソリッドかを確認するために使用するタイルの多次元配列があります。
プレーヤーが水平方向と垂直方向の両方に移動している場合は、壁に対してスライドしてもらいたいと思います。問題は、彼がそうすると、壁にくっつくことです。私はそれを各軸で完全に機能させることができましたが、個別に. 水平衝突チェックのコードは次のとおりです。
if (vx < 0) {
// checks for solid tiles left of the player
if (level.isBlocked(i, j) || level.isBlocked(i, jj)) {
x = side * (i + 1); // moves player to left side of tile
vx = 0;
}
} else if (vx > 0) {
// checks for solid tiles right of the player
if (level.isBlocked(ii, j) || level.isBlocked(ii, jj)) {
x = (ii * side) - getWidth(); // moves player to right side of tile
vx = 0;
}
}
level.isBlocked ()メソッドは、配列のインデックスがソリッド タイルで占められているかどうかをチェックします。iおよびj変数は、プレーヤーの右上隅が配置されている配列内のインデックスです。ii変数とjj変数は、プレーヤーの右下隅が配置されている配列内のインデックスです。
これは問題なく動作しますが、同じコードのチャンクを下に追加して、xをyに、vxをvyに置き換えると、問題が発生します。したがって、水平または垂直の衝突処理を追加すると機能しますが、同時には機能しません。それらを分離する必要があるか何かを説明している記事をいくつか見ましたが、それらの多くを理解していませんでした. 両方の軸で衝突をチェックし、スライド効果を維持するにはどうすればよいですか?