私はpygameモジュールとmathモジュールを使用してPythonでゲームをプログラミングしていました。衝突検出を行うためにこれらのコードを作成しました(プレーヤーに衝突させたい5つの障害物を作成しました)が、問題はゲームのプレイ中に発生し、機能する場合と機能しない場合がありました。
これらは私が定義した衝突関数です
def collide1(binX, binY, playerX, playerY):
distance = math.sqrt(math.pow(binX - playerX, 2) + math.pow(binY - playerY, 2))
if distance == 27:
return True
else:
return False
def collide2(snowX, snowY, playerX, playerY):
distance = math.sqrt(math.pow(snowX - playerX, 2) + math.pow(snowY - playerY, 2))
if distance == 27:
return True
else:
return False
def collide3(glacierX, glacierY, playerX, playerY):
distance = math.sqrt(math.pow(glacierX - playerX, 2) + math.pow(glacierY - playerY, 2))
if distance == 27:
return True
else:
return False
def collide4(boardX, boardY, playerX, playerY):
distance = math.sqrt(math.pow(boardX - playerX, 2) + math.pow(boardY - playerY, 2))
if distance == 27:
return True
else:
return False
def collide5(iceX, iceY, playerX, playerY):
distance = math.sqrt(math.pow(iceX - playerX, 2) + math.pow(iceY - playerY, 2))
if distance == 27:
return True
else:
return False
whileループで
# Collision Detection
collision1 = collide1(binX, binY, playerX, playerY)
collision2 = collide2(snowX, snowY, playerX, playerY)
collision3 = collide3(glacierX, glacierY, playerX, playerY)
collision4 = collide4(boardX, boardY, playerX, playerY)
collision5 = collide5(iceX, iceY, playerX, playerY)
if collision1:
print("You have collided!")
elif collision2:
print("You have collided!")
elif collision3:
print("You have collided!")
elif collision4:
print("You have collided!")
elif collision5:
print("You have collided!")
どこが間違っているのか教えてください。
実際には、プレイヤーが障害物に触れているかどうかを確認しているだけですが、プレイヤーが障害物と交差すると衝突を見逃します。distance <= 27
ではなく、を評価する必要がありdistance == 27
ます。さらに、衝突テストには1つの関数を実装するだけで十分です。
def collide(x1, y1, x2, y2):
distance = math.sqrt(math.pow(x1 - x2, 2) + math.pow(y1 - y2, 2))
if distance <= 27:
return True
else:
return False
この機能はさらに簡略化できます。
def collide(x1, y1, x2, y2):
distance = math.hypot(x1 - x2, y1 - y2)
return distance <= 27
ループを使用して衝突テストを実行します。
obstacles = [(binX, binY), (snowX, snowY), (glacierX, glacierY), (boardX, boardY), (iceX, iceY)]
for x, y in obstacles:
collision = collide(x, y, playerX, playerY)
if collision:
print("You have collided!")
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加