学校のプロジェクトで Android ゲームを作成しています。私は Java には精通していますが、ゲームの作成経験はありません。私のゲームでは、ボールはプレーヤーによってコントロールされます。このボールは壁で跳ね返る必要があります。
私はこれを2つの方法で試しましたが、どちらも失敗しました。最初の試行: オーバーラップは検出できますが、ボールが当たる側を検出できません。
c = ボール、r = 壁
float closestX = c.center.x;
float closestY = c.center.y;
if(c.center.x < r.topLeft.x) {
closestX = r.topLeft.x;
}
else if(c.center.x > r.topLeft.x + r.width) {
closestX = r.topLeft.x + r.width;
}
if(c.center.y < r.topLeft.y) {
closestY = r.topLeft.y;
}
else if(c.center.y > r.topLeft.y + r.height) {
closestY = r.topLeft.y + r.height;
}
return c.center.distSquared(closestX, closestY) < c.radius * c.radius;
そこで、新しいアプローチを試みました。しかし、このアプローチは不安定で、ボールを正方形のように扱います。
cNew = 次の位置のボール、cOld = 現在の位置のボール、r = 壁
if (cNew.center.x + cNew.radius >= r.topLeft.x && cNew.center.x - cNew.radius <= r.topLeft.x + r.width)
{
if (cOld.center.y + cOld.radius < r.topLeft.y && cNew.center.y + cNew.radius >= r.topLeft.y)
{
return Side.TOP;
}
else if (cOld.center.y - cOld.radius > r.topLeft.y + r.height && cNew.center.y - cNew.radius <= r.topLeft.y + r.height)
{
return Side.BOTTOM;
}
}
if (cNew.center.y + cNew.radius >= r.topLeft.y && cNew.center.y - cNew.radius <= r.topLeft.y + r.height)
{
if (cOld.center.x + cOld.radius < r.topLeft.x && cNew.center.x + cNew.radius >= r.topLeft.x)
{
return Side.LEFT;
}
else if (cOld.center.x - cOld.radius > r.topLeft.x + r.width && cNew.center.x - cNew.radius <= r.topLeft.x + r.width)
{
return Side.RIGHT;
}
}
return null;
これら2つを何らかの方法で組み合わせる必要がありますが、その方法を見つけることができませんでした。
助けていただければ幸いです。