コンテキスト: LCD 画面に表示されるマイクロプロセッサで小さなゲームを開発する。
この衝突検出機能を修正しようとしています。これは、ウォール スプライト (1 x 25 ピクセル) とプレーヤー スプライト (3x3 ピクセル) の間の衝突を検出することです。プレイヤー スプライトの dx/dy が変更されて動きが停止した場合は、1 または 0 を返します。したがって、基本的にウォール スプライトは実際の壁として扱われます。
int wall_collision(Sprite *w_sprite)
{
if (((w_sprite->x >= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) < 3)) && ((w_sprite->y >= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) < 3)))
return 1;
if (((w_sprite->x <= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) > -3)) && ((w_sprite->y >= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) < 3)))
return 1;
if (((w_sprite->x >= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) < 3)) && ((w_sprite->y <= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) > -3)))
return 1;
if (((w_sprite->x <= wall_sprite.x) && ((w_sprite->x - wall_sprite.x) > -3)) && ((w_sprite->y <= wall_sprite.y) && ((w_sprite->y - wall_sprite.y) > -3)))
return 1;
return 0;
}
私の主な問題は、スプライトが等しい/より大きい/より小さい正確な数を指定することです。例でわかるように、それは3または-3です。数字を取り出すと、スプライトは技術的には壁と同じ x または y 軸上にあるため、1 を返し、スプライトを停止します。このための正しいサイズ パラメータは何ですか?
ケースの問題: スプライトは、壁に直接触れたときにのみ停止する必要があります。現在、スプライトは壁を通過するか、壁に近づいていないときに停止します。