2011-05-31 66 views
2

我有一个类型为Dot的数组,它携带一个点和半径,以及一个具有Point和Size的矩形的Player。我如何在两个班级之间发生碰撞和反应?

我会创建一个方法,不断测试玩家是否触摸/碰撞数组中的任何点。我在哪里写代码,我需要作为参数传入什么?

这是玩家必须躲避点的游戏。到目前为止,我有这样的事情。

for (int i = 0; i < NUM_DOTS; i++) { 
    if (player.intersects(dotPos[i])) { 
     gameOver = true; 
    } 
} 
+1

请参阅这些[问题和答案](http://stackoverflow.com/search?q=%5Bjava%5D+%5Bswing%5D+intersects)。 – trashgod 2011-05-31 00:36:08

回答

1

您使用哪种前端技术?如果使用Swing/AWT,它们提供可侦听更改的事件侦听器。对于Web应用程序,提交/ AJAX操作甚至可以查找更改。

如果你想真的是通用的,你需要创建一个新的线程并让你的监听器代码在run方法中。

+0

我正在使用swing/awt.event – James 2011-05-31 00:09:08

+0

当用户改变方向时,您可以使用动作侦听器。有一些特定的鼠标。 (http://download.oracle.com/javase/tutorial/uiswing/events/actionlistener.html)。或者,如果轮询未绑定到事件,则可以使用javax.swing.Timer。 – 2011-05-31 00:39:59

1

如果允许使用实现java.awt.Shape接口的类,那么定义的intersects()方法之一可能会有所帮助。

1

也,线性插值听起来像它可能有助于

+0

你能提供一个链接或更多的细节? – trashgod 2011-05-31 01:00:15

+0

lerp(线性插值)找到两点之间的线。如果你的玩家/点不断地在一条直线上移动,你可以使用lerp来检查一个点/点是否可以相互接触。 lerp相当容易实现,并且是许多语言的常用方法 - 虽然我不能想到java中的基本ler函数,但查看wiki页面[link](http://en.wikipedia.org/wiki/Linear_interpolation )对于如何计算它的相当简洁的解释 – 2011-05-31 01:22:14

+0

(它的优点是,你可以检查一次,两者是否可能通过路径,如果它们不会,你不需要继续查询它们是否相互碰撞)我知道它并不完全解决你的问题,你需要使用其他交叉方法之一,但它会帮助减少你的计算 – 2011-05-31 01:26:24

1

会在哪里我写的代码,我需要什么作为参数传递?

在您的应用程序中,您将有一些事件处理程序来检测用户何时移动。根据游戏的性质,每次用户移动时都可以进行检查。假设你已经使用了一个keyListener,你可以在按压事件处理程序中使用for循环来确定碰撞。

此外,你可能有一个线程运行,移动的点(做点移动?)。这是另一个可以放置代码来检查冲突的地方。

相关问题