Java 2D游戏 - 检查玩家是否接触到另一个精灵

时间:2013-06-24 07:02:08

标签: java java-2d 2d-games game-development

我有一个火箭着陆游戏的游戏,玩家是火箭,你必须以合适的速度安全降落在着陆垫上。这取自www.gametutorial.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

2 个答案:

答案 0 :(得分:1)

对于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());
}

此外,还有一个针对游戏相关问题的特定网站。转到Game Development Stack Exchange

答案 1 :(得分:1)

如果点击坐标位于对象Rectangle内,则需要检查是否击中了对象。

if( playerRocket.x + playerRocket.width  >= clickX && playerRocket.x <= clickX  &&
    playerRocket.y + playerRocket.height >= clickY && playerRocket.Y <= clickY ) {

    playerRocket.crashed = true;

}