我有一个火箭降落游戏,玩家是火箭,你必须以正确的速度将其安全降落在着陆台上。本文摘自www.gametorial.net
这实际上是为了教育目的,我最近在游戏中添加了一颗静止的流星。当玩家击中流星时,游戏结束。
if(...) {
playerRocket.crashed = true;
}
我的问题是,我需要用"火箭撞上流星了吗?"的实际情况来代替"…"
加上以下变量(坐标、高度和宽度)以供使用-[所有整数]:
X and Y coordinates: playerRocket.x, playerRocket.y, meteor.x, meteor.y
Height and Width: playerRocket.rocketImgHeight, playerRocket.rocketImgWidth, meteor.meteorImgHeight, meteor.meteorImgWidth
对于2D游戏中的碰撞检测,可以使用矩形。我会使用一个名为GObject
的基类,并从中继承游戏中的所有对象
public class GObject
{
private Rectangle bounds;
public float x, y, hspeed, vspeed;
private Image image;
public GObject(Image img, float startx, float starty)
{
image = img;
x = startx;
y = starty;
hspeed = vspeed = 0;
bounds = new Rectangle(x, y, img.getWidth(null), img.getHeight(null));
}
public Rectangle getBounds()
{
bounds.x = x;
bounds.y = y;
return bounds;
}
}
还有其他方法,如update()
和render()
,但我不展示它们。因此,要检查两个对象之间的碰撞,请使用
public boolean checkCollision(GObject obj1, GObject obj2)
{
return obj1.getBounds().intersects(obj2.getBounds());
}
此外,还有一个专门的游戏相关问题网站。转到游戏开发堆栈交换
您需要检查是否击中了对象,也就是说,单击坐标是否在对象的Rectangle
内。
if( playerRocket.x + playerRocket.width >= clickX && playerRocket.x <= clickX &&
playerRocket.y + playerRocket.height >= clickY && playerRocket.Y <= clickY ) {
playerRocket.crashed = true;
}