私が行っている 3D 用に作成した衝突検出に問題があります。
衝突検出を行った方法は、最初に古い xyz 座標を変数に格納し、次に移動関数を呼び出し、次に衝突関数を呼び出します。移動後に衝突があった場合、カメラは (今のところ) プレーヤーの場合と同様に、古い xyz 座標に戻されます。
キャラクターが立方体の側面に沿って「スライド」できるようにしたいので、x 軸で衝突した場合でも、z 軸に沿ってわずかにスライドできます。ただし、コーナーでは、x と z の両方の衝突があるため、キャラクターは完全に停止します。これが起こらないように、z と x の衝突に個別の変数を作成することにしましたが、角にいるときに立方体の内側に入ることができますが、X 軸でのみです。これを修正する方法がわかりません。さまざまなこと(コードの最新の変数など)を試しましたが、よくわかりません。助けていただければ幸いです。コードの関連部分は次のとおりです。
def otherCollision(self,x,y,z):
print(float(Camera.x))
xcol = 0
zcol = 0
latest = 0
if (-Camera.x >= cubez[0][0] - 1) and \
(-Camera.x <= cubez[0][0] + cubez[0][3] + 1) and \
(-Camera.z >= cubez[0][2] - 1) and \
(-Camera.z <= cubez[0][2] + cubez[0][5] + 1):
if (-Camera.x >= cubez[0][0] - 1) and \
(-Camera.x <= cubez[0][0]) or \
(-Camera.x <= cubez[0][0] - 1 + cubez[0][3] + 2) and \
(-Camera.x >= cubez[0][0] - 1 + cubez[0][3] + 1): #>
#Camera.x = x
xcol = 1
latest = 1
if (-Camera.z >= cubez[0][2] - 1) and \
(-Camera.z <= cubez[0][2]) or \
(-Camera.z <= cubez[0][2] - 1 + cubez[0][5] + 2) and \
(-Camera.z >= cubez[0][2] - 1 + cubez[0][5] + 1): #>=
#Camera.z = z
zcol = 1
latest = 2
if xcol == 1 and zcol == 0:
Camera.x = x
if zcol == 1 and xcol == 0:
Camera.z = z
if xcol == 1 and zcol == 1 and latest == 2:
Camera.x = x
if xcol == 1 and zcol == 1 and latest == 1:
Camera.z = z
にはリスト内にリストがあることに注意してくださいcubez
。最初のインデックスはオブジェクトの番号で、次のインデックスは探している値です。それらは順番に、x,y,z,width,height,depth
.
私はpyglet 1.2alphaを使用していますが、問題は明らかに私のロジックにあるため、これは投稿にあまり関係していないと思います。