如何在Java中创建实心矩形?

时间:2011-09-04 17:01:01

标签: java collision-detection sprite game-physics

如何在java中创建一个实心矩形(或块),以便我的播放器可以站在它上面?

目前我正在保存最后一个位置,一旦我检测到玩家的矩形并且该块的矩形相交...我将位置重置为前一个位置。但这并不是很好。

有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

这不是一个简单的问题。没有实心矩形;你必须使用大量代码创建幻觉(除非你可以从某个地方借用一些代码)。我的建议是使用圆而不是矩形。您可以根据中心的位置以及它们的半径来确定它们的位置。 (如果你把它们画成矩形,我的猜测是没有人会注意到它们的行为像圆圈一样。)

现在,只要两个“矩形”的中心点比它们的直径之和更接近,就会发生碰撞,并且可以轻松计算出每个“矩形”以防止重叠的数量。通过一些算术(和几何),你可以使它看起来很好。您可以返回并确定碰撞发生的时间和地点,并在碰撞后确定正确的路径,从而确定当前的正确位置。

让圆圈工作,你可以回到矩形 - 它们只是半径随方向变化的圆圈。 (我不会打扰。)但是在你开始工作之前这并不容易。然后你可以在一千个地方使用这些代码,并且忘记了首先编写它的痛苦。

答案 1 :(得分:2)

要绘制实体矩形,您将进入paint方法并调用fillRect。

public void paint(Graphics g) {
    g.fillRect (10, 10, 210, 230);  
}

答案 2 :(得分:0)

从某种意义上说,你要问如何实现二维Physics Engine的一些基础知识。

请注意,即使是大型游戏工作室也在使用其他人制造的引擎......像Halo,Bioshock,Assassin's Creed等大牌都使用“Havok”:

http://en.wikipedia.org/wiki/Havok_(software)

即使在更简单的二维平台游戏世界中,从一些更高级别的东西开始也许更好。你接受你已经有一个例程来绘制矩形和圆圈(而不是自己绘制像素)。为什么不让自己使用某人已经制作的精灵库?

如果你想使用更基本的物理和算法,还有JBox2D之类的东西,这很有趣:

http://www.jbox2d.org/

除此之外,以下问题的答案可能有用,包括一些导致平台游戏库的内容:

Collision Detection between two images in Java

我还要补充说,有时候如果你想要一个游戏,那么在经历所有麻烦之前,原型并证明你的设计实际上是有趣更为重要。写它。有一些很好的工具,但GameSalad是我最近听到的一个很大的工具。其他资源:

http://en.wikipedia.org/wiki/Category:Video_game_creation_software

答案 3 :(得分:0)

如果您想知道两个矩形是否相交,可以使用Java类Rectangle。 它定义了一个函数intersect,它接受另一个矩形并告诉你两个是否相交。 在游戏中,你通常会在移动他之前计算玩家的新位置和障碍物。然后检查新计算的位置是否与玩家相交。如果是,如果不是,则不移动他,将位置更新为您计算的位置。

让我们假设您的玩家现在处于oldRect。

Rectangle oldRect;
Point moveVector;
Rectangle newRect = new Rectangle(oldRect.x+moveVector.x, oldRect.y+moveVector.y, oldRect.width, oldRect.height);