【问题标题】:How can java detect collision of shapes that are stored in an array Javajava如何检测存储在数组Java中的形状的冲突
【发布时间】:2015-03-03 18:11:11
【问题描述】:

所以我想做的是让用户能够绘制矩形并检测矩形之间的碰撞。

矩形被添加到一个 Array_List 形状中:

ArrayList<Shape> shapes = new ArrayList<Shape>();

对于碰撞,java 必须通过 ArrayList 来检测形状的碰撞。 (任何其他检测碰撞的方法都可以)。 我知道 java 有一个用于形状的“.intersects()”方法,但这里更多的是关于许多形状,我不知道如何在这里使用它。

这是我迄今为止为碰撞所做的一个小小的开始,我准备好坚持下去了。请帮忙?

if (currentAction == 4) {

// Create a new rectangle using x & y coordinates 

aShape = drawRectangle(drawStart.x, drawStart.y,
 e.getX(), e.getY());

//aShape added to the arraylist shapes
 shapes.add(aShape);                                                             

 for(int i=0;i<shapes.size();i++){                            
Shape s = shapes.get(i);

  //collision detection                                 

 }
  }                                 

【问题讨论】:

  • 有多种方法可以确定两个形状是否发生碰撞,具体取决于您的需要。看看this example 一个。
  • @MadProgrammer 在您的示例中,已经定义了两个矩形。需要检测我将绘制的矩形之间的冲突。
  • @MadProgrammer 我只想让程序遍历数组,读取形状的坐标,比较它们并找出碰撞的形状。你能帮忙吗?
  • 比较两个Shapes 的基本原则没有改变。您只需要确定如何循环遍历其中的List 并进行比较。提示,您可能需要一个复合循环...
  • 谢谢@MadProgrammer 我已经成功了!! :D

标签: java arraylist collision-detection collision shape


【解决方案1】:

我会给你提示 - 尝试阅读动态编程并尝试将碰撞分解为水平发生的碰撞和垂直发生的碰撞。

希望对你有帮助……

【讨论】:

  • 我真的不明白你所说的将碰撞分解为一个是什么意思。我想做的是找到存储在数组列表中的形状之间的任何冲突。
  • 我的意思是你首先需要排序然后迭代ArrayList并在X轴上寻找碰撞,如果你没有找到这样的碰撞你可以再次迭代并检查Y轴碰撞。另一种解决方案是对 O(n^2) 复杂度的每个形状使用 intersect() 方法。
  • 我确实想到了 intersect() 方法,但是当形状在数组列表中时如何比较?
  • 对于列表中的每个形状,将其与列表中的其他形状进行比较。但这确实是不够的。
  • 你有什么建议?
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
相关资源
最近更新 更多