1

我正在制作 apong 游戏,在 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()

===============

** 矩形类:

getCenterX()
getCenterY() 

================

** 屏幕类:

getWidth()
getHeight()

我只想确定至少一个条件,然后我可以找出其余的条件。

4

2 回答 2

0

如果两个 2d 区域,桨(一个矩形)和球(一个圆)相交,这个问题可以被视为解决问题。您可以为此使用 google/wiki 公式。

如果您不想通过几何解决问题的数学,包 java.awt.geom 包含可以为您进行计算的类,即 java.awt.Area。您只需为 paddle 和 ball 创建 Area 实例,然后调用 intersects() 方法来了解它们是否发生碰撞。

于 2013-10-29T18:19:42.333 回答
0

在我大学三年级的时候,我研究了 Windows Phone 的碰撞检测系统算法。它几乎不是完美的,但它非常高效,可以适应大多数游戏。

它的工作方式非常简单。有两种类型的对象;可碰撞对象(例如敌人或建筑物)以及您希望检查与这些可碰撞对象的碰撞的对象。

当我学习数据结构课程并谈到链接列表时,我就有了这个想法。我想如果每个链接都是一个可碰撞的对象,你可以粘贴已经在其中创建的游戏对象。然后当游戏对象四处移动时,您将有一种轻量级的方法来检查它们的位置是否有碰撞。于是我的系统诞生了。

基本上它归结为使用

C(或点之间的距离)= SqrRoot(A^2 + B^2) - 球的半径

这个公式对你来说应该很熟悉。

你可以看到这个问题的完整答案: Java More Resourceful Collision Detection

于 2013-10-29T16:57:02.783 回答