2つの矩形間の衝突を検出することは非常に簡単ですが、2Dゲームでは壁に衝突しないことを確認することは非常に困難です。私はそれを管理しましたが、それはバギーであり、プレイヤーが壁を通過するのを防ぐために、1歩につき約14のif文が必要です。2つの長方形間の衝突を防ぐ簡単な方法は何ですか?
if wall_bottom > entity_top and wall_top < entity_bottom: # is player between y min and max
if entity_left >= wall_right - entity.max_velocity: # is the player on the right side of the box (in or out)
if (entity_left + entity.x_velocity) < wall_right: # will the player be past the right side
if entity.x_velocity < 0: # is the player's velocity heading left (into right side)
entity.x = wall_right # x coord changed to edge of wall
entity.x_velocity = 0 # velocity reset, wall stops player
elif entity_right <= wall_left + entity.max_velocity and \
(entity_right + entity.x_velocity) > wall_left and \
entity.x_velocity > 0:
entity.x = wall_left - entity.x_length
entity.x_velocity = 0
if wall_right > entity_left and wall_left < entity_right: # is player between x min and max
if entity_top >= wall_bottom - entity.max_velocity and \
(entity_top + entity.y_velocity) < wall_bottom and \
entity.y_velocity < 0:
entity.y = wall_bottom
entity.y_velocity = 0
elif entity_bottom <= wall_top + entity.max_velocity and \
(entity_bottom + entity.y_velocity) > wall_top and \
entity.y_velocity > 0:
entity.y = wall_top - entity.y_length
entity.y_velocity = 0
私はすべてのエンティティのエッジを定義し、チェックプレイヤーは将来に一つのフレームを衝突された場合、その後のプレーヤーがオンになっている箱の側に座標を設定します。この解決策は控えめで、多くのバグがありました。私はよりよい解決策を考え出してきましたが、それを行う簡単な方法を見つけることができないようです。私は明白な何かを欠いていますか
チェックアウト:https://gamedev.stackexchange.com/questions/586/what-is-the-fastest-way-to-work-out-2d-bounding-box-intersection –
ありがとうございます。衝突を防ぐために探しています。長方形間の衝突を検出するのは簡単ですが、私はそれを探していません。 –
完全な例[here](https://stackoverflow.com/questions/40966994/pygame-sprite-wall-collision/45017561#45017561)を投稿しました。 – skrx