做了很多谷歌搜索,但无法解决这个问题。 我想生成n个数字矩形并在屏幕上绘制它们。 X,Y是随机生成的,宽度和高度基于字体大小。我的目标是在随机定位的屏幕上绘制n个单词而不重叠现有矩形。我正在使用Rectangle进行碰撞检测。
private List<Rectangle> rectList = new ArrayList<Rectangle>();
public boolean checkForCollision(Rectangle r) {
boolean collision = false;
if (rectList.size() == 0) {
rectList.add(r);
System.out.println("Adding First");
return collision;
} else {
// loop through the list
Rectangle currRectangle;
for (int i = 0; i < rectList.size(); i++) {
currRectangle = rectList.get(i);
if (r.intersects(currRectangle)) {
System.out.println(r.toString());
System.out.println(currRectangle.toString());
System.out.println("=========================");
return collision;
}
}
System.out.println("No collision");
rectList.add(r);
return !collision;
}
}
这就是我在创建矩形并在其上绘制单词所做的工作。我在这里使用循环。
int width = graphics.getFontMetrics().stringWidth(temp.getWord());
int height = graphics.getFontMetrics().getHeight();
Rectangle newRectangle = new Rectangle(rand.nextInt(1250)+1, rand.nextInt(650)+1, width, height);
int xCordinate = (int)newRectangle.getX();
int yCordinate = (int) newRectangle.getY();
while(collisonChecker.checkForCollision(newRectangle)){
//newRectangle = new Rectangle(rand.nextInt(1250)+1, rand.nextInt(650)+1, width, height);
newRectangle.setLocation(rand.nextInt(1250)+1,rand.nextInt(650)+1);
collisonChecker.checkForCollision(newRectangle);
}
graphics.drawRect((int)newRectangle.getX(), (int)newRectangle.getY(), (int)newRectangle.getWidth(), (int)newRectangle.getHeight());
newRectangle.setLocation(rand.nextInt(1250)+1,rand.nextInt(650)+1);
graphics.drawString(temp.getWord().trim(), (int)newRectangle.getX(),(int)newRectangle.getY() );
答案 0 :(得分:0)
您永远不会更改您的返回值。无论如何,如果发生碰撞,该方法返回false。将你的返回值设置为true idle,for-loop中存在一个碰撞,应该解决问题
我希望至少有一点帮助
答案 1 :(得分:0)
好的,所以这看起来很奇怪&#34;给我......
while(collisonChecker.checkForCollision(newRectangle)){
//newRectangle = new Rectangle(rand.nextInt(1250)+1, rand.nextInt(650)+1, width, height);
newRectangle.setLocation(rand.nextInt(1250)+1,rand.nextInt(650)+1);
collisonChecker.checkForCollision(newRectangle);
}
graphics.drawRect((int)newRectangle.getX(), (int)newRectangle.getY(), (int)newRectangle.getWidth(), (int)newRectangle.getHeight());
newRectangle.setLocation(rand.nextInt(1250)+1,rand.nextInt(650)+1);
graphics.drawString(temp.getWord().trim(), (int)newRectangle.getX(),(int)newRectangle.getY() );
您创建了一个新的Rectangle
,检查了碰撞并开始循环true
,在循环中更改了Rectangle
的位置和检查碰撞但忽略返回结果......?但那不是更糟糕的部分......
一旦循环结束,你随机生成Rectangle
的新位置,完全忽略你在循环中所做的所有工作......?
也许你应该做更像......的事情。
while(collisonChecker.checkForCollision(newRectangle)){
newRectangle.setLocation(rand.nextInt(1250)+1,rand.nextInt(650)+1);
}
graphics.drawRect((int)newRectangle.getX(), (int)newRectangle.getY(), (int)newRectangle.getWidth(), (int)newRectangle.getHeight());
graphics.drawString(temp.getWord().trim(), (int)newRectangle.getX(),(int)newRectangle.getY() );