私はopenglで3D迷路、2Dのような衝突をやっています
マップは 2dim 配列のように定義されます
---------x axis
|0 0 0
|0 1 0
|0 0 0
|
|z axis
その1は立方体です
その立方体を4つの立方体に分割します
.
_ _
|_|_|
|_|_|
ドットは、x、z 座標のカメラ ポイントで、キューブに移動します。posX,Z はこのように計算されますが、重要ではありません。
posZ -= (float) ((Math.cos(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
posX += (float) ((Math.sin(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
display() メソッドでミリ秒ごとまたは sth ごとに計算されます。int にキャストするので、配列の正しい座標を取得し、newX、Z に保存します。
newposZ = (int) posZ;
newposX = (int) posX;
if (maze[newposZ][newposX] == 1) {
どこから来ているのかを方位角で確認します..このように(これは上の写真のドット位置です。壁にまっすぐ向いている場合、左上の立方体方位角は180ですが、90から270まで確認したい..)
if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 90 && azimut < 270) {
posZ = newposZ;
}
はい、1.1 の posZ を 1 のキャストされた newposZ に変更します。すべて問題ありません。カメラが壁に当たりますが、その方位角のチェックは悪い考えです。このまま放置
if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 0 && azimut > 180) {
posX = newposX;
}
ある角度 (角度 90 から 180 の両方で同じなので..) で、posX と posZ の両方を同時に newposX、newposZ に設定するため、悪いことです.. その変数の 1 つが正しく固定されていますが、他の変数はそうではありません。わかる
-45 度から 45 度までだけチェックすれば問題なく動作しますが、-90 度から +90 度にしたいのですが、誰か助けてもらえますか?