1

这是我第一次做 Java GUI 的东西,我有几个问题。我正在制作一个简单的横向卷轴游戏——特别是在计划它。窗口将是 800x800。

随着游戏滚动(每 40 像素左右),将会绘制建筑物。我想我会制作一个 900 像素的黑色矩形,然后将其副本设置为不同的像素高度(以改变新建筑物的高度)。然后矩形的底部将自动被剪裁。

(1)这行得通吗?

在屋顶上方的天空中,我将让目标飞过,可以点击并击落以获得积分。我在想我会为目标制作一个 ImageIcon,然后将其绘制在屏幕上移动。但我认为很难跟踪目标坐标然后获得鼠标点击坐标然后检查它们是否匹配。

(2) 有没有简单的方法来判断目标是否被点击击中(没有很多坐标和数学)?

从左到右,屋顶上还有滑板手滑冰。我在想我会在他身后放置一个隐藏的矩形,然后查看它是否与给定的矩形屋顶相交,以判断他何时着陆。但问题是,在他进入屋顶之前,它们不会相交。我希望他就在屋顶上方。

我怎样才能知道滑板手何时就在屋顶上方(没有大量的坐标数学)?

4

1 回答 1

1

随着游戏滚动(每 40 像素左右),将会绘制建筑物。我想我会制作一个 900 像素的黑色矩形,然后将其副本设置为不同的像素高度(以改变新建筑物的高度)。然后矩形的底部将自动被剪裁。

那很好 - 底部会被剪掉。

在屋顶上方的天空中,我将让目标飞过,可以点击并击落以获得积分。我在想我会为目标制作一个 ImageIcon,然后将其绘制在屏幕上移动。但我认为很难跟踪目标坐标然后获得鼠标点击坐标然后检查它们是否匹配。

我想不出任何更简单的方法来做到这一点。检查矩形区域的命中并不难:

if(mouseX >= targetX && mouseX < targetX+targetWidth &&
        mouseY >= targetY && mouseY < targetY+targetHeight){
    // is a hit
}

为了更好地进行碰撞检测,您可以在目标精灵上设置遮罩颜色,该遮罩颜色是隐藏的(或者如果您不使用遮罩,请检查 alpha 是否为 0)。如果鼠标单击目标图像区域内的非蒙版像素,则您成功了。用于检查鼠标事件查找 MouseListener 或 MouseAdapter。

从左到右,屋顶上还有滑板手滑冰。我在想我会在他身后放置一个隐藏的矩形,然后查看它是否与给定的矩形屋顶相交,以判断他何时着陆。但问题是,在他进入屋顶之前,它们不会相交。我希望他就在屋顶上方。

你不应该需要一个不可见的矩形。滑板手图像应该具有您应该可用的宽度和高度。图像是从左上角绘制的,所以滑板的底部是他绘制的 Y 位置加上图像高度。您希望阻止该值超出屋顶边界。

于 2010-09-24T08:44:19.807 回答