我正在制作游戏,在Paddle类的布尔方法中,我想确定球是否接触到两个桨中的任何一个,我正在努力寻找合适的逻辑......
这里是变量:
// instance variables
private Screen theScreen;
private MyroRectangle theRectangle;
private int topLeftX;
private int topLeftY;
// constants
private final int HEIGHT = 100; //the paddle's fixed height
private final int WIDTH = 5; //the paddle's fixed width
private final int PIXELS_PER_MOVE = 20; //the number of pixels a paddle can move either up or down in one timestep
这里的方法是:*这个方法只是为了确定球是否接触它没有做任何反弹球回来
public boolean isTouching(Ball b)
{
boolean t = false;
if ((theScreen.getWidth()-(b.getX() + b.getRadius())) >= theScreen.getWidth()-theRectangle.getCenterX() )
{
t= true;
}
return t;
我也尝试过:
if ((b.getX() > theRectangle.getCenterX()/2) && (b.getY() < theRectangle.getCenterY()/2))
========== **可能需要的球类方法:
getX()
getY()
getRadius()
==============
** Rectangle类:
getCenterX()
getCenterY()
===============
** Screen类:
getWidth()
getHeight()
我只想确定条件,然后我可以弄清楚其余部分。
答案 0 :(得分:0)
在大学三年级的时候,我为Windows手机开发了碰撞检测系统算法。它并不完美,但它极其高效,可以适应大多数游戏。
它的工作方式非常简单。有两种类型的对象;可碰撞物体(如敌人或建筑物)和您希望检查与这些可碰撞物体碰撞的物体。
当我浏览数据结构类时,我有了这个想法,我们谈到了链接列表。我想如果每个链接都是一个可碰撞的对象,你可以粘贴已经在其中创建的游戏对象。然后,当游戏对象四处移动时,您将有一种轻量级的方法来检查它们的碰撞位置。因此我的系统诞生了。
基本上归结为使用
C(或点之间的距离)= SqrRoot(A ^ 2 + B ^ 2) - 球的半径
这个公式对你来说应该很熟悉。
您可以在这个问题上看到完整的答案: Java More Resourceful Collision Detection
答案 1 :(得分:0)
如果两个2d区域,即桨(矩形)和球(圆形)相交,则可以将此问题视为解决问题。你可以只为google / wiki公式。
如果你不想通过几何来解决问题的数学,那么包java.awt.geom包含可以为你做计算的类,即java.awt.Area。您只需为paddle和ball创建Area实例,然后调用intersects()方法以了解它们是否发生碰撞。