如何在java中创建一个实心矩形(或块),以便我的播放器可以站在它上面?
目前我正在保存最后一个位置,一旦我检测到玩家的矩形并且该块的矩形相交...我将位置重置为前一个位置。但这并不是很好。
有更好的方法吗?
答案 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之类的东西,这很有趣:
除此之外,以下问题的答案可能有用,包括一些导致平台游戏库的内容:
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);