我正在用Java写一个Shikaku-Game。在那个Shikaku-Game中你必须在显示的JLabel周围绘制矩形(JLabels使用ViewIcon类的图像,它实现了界面图标)。每次绘制与现有矩形相交的新矩形或完全覆盖现有矩形时,都应删除现有矩形,并且不得绘制新矩形。不幸的是,我现在使用了Mouseadapter的MouseReleased-Method中使用的以下方法。现有的矩形被收集在ArrayList矩形中。 "不太好看" if子句检查新矩形如何与现有矩形相交的所有可能性。
我已经在方法中放了rectangles.size()来检查ArrayList是否清除了它的元素,但它没有。金额只会提高,但通常应该显示游戏中那个时刻的矩形数量。
有时现有的矩形会消失,有时只是部分消失,有时候我不能在一个矩形难以消失的地方绘制一个矩形......我无法理解发生了什么。
你应该知道的另一个信息是drawRectangle(boolean b)的方法:它将coordPressed作为左上角,coordReleased作为buttom右角(如果在游戏中,用户绘制一个矩形,例如来自buttom)从左到右,方法首先标准化,从左上角到右边标准化#34;)。之后它找出(通过使用Coordinte方法getX()和getY()),其中JLabel / ViewIcons是该矩形中的边缘,并放入这些ViewIcons中,例如topLeftLinePainted为true或false,具体取决于是否应显示(创建矩形)或隐藏(删除矩形)。创作完美无缺,只要它不与另一个矩形相交。
private ArrayList<PaternRectangle> rectangles = new ArrayList();
private Coordinate coordPressed;
private Coordinate coordReleased;
public void drawOrDeleteRectangle() {
Iterator<PaternRectangle> itrPatRect = rectangles.iterator();
boolean rectIntersectionDetected = false;
int itrPatRectIndexCounter = 0;
Coordinate coordPressedBackUp = coordPressed;
Coordinate coordReleasedBackUp = coordReleased;
while (itrPatRect.hasNext()) {
PaternRectangle tempRect = itrPatRect.next();
if (coordReleased.getX() <= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() <= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() >= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() >= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() <= tempRect.getCoordButtomRight().getY()
&& coordPressed.getX() >= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() >= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() <= tempRect.getCoordTopLeft().getY()
&& coordReleased.getX() >= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() >= tempRect.getCoordButtomRight().getY()
|| coordPressed.getX() >= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() <= tempRect.getCoordTopLeft().getY()
&& coordReleased.getX() <= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() >= tempRect.getCoordButtomRight().getY()
|| coordPressed.getX() >= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() >= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() <= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() <= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() >= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() >= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() <= tempRect.getCoordTopLeft().getY()) {
coordPressed = tempRect.getCoordTopLeft();
coordReleased = tempRect.getCoordButtomRight();
drawRectangle(false);
rectIntersectionDetected = true;
rectangles.remove(itrPatRectIndexCounter);
break;
}
itrPatRectIndexCounter++;
}
if (!rectIntersectionDetected) {
coordPressed = coordPressedBackUp;
coordReleased = coordReleasedBackUp;
drawRectangle(true);
PaternRectangle newRectangle = new PaternRectangle(coordPressed, coordReleased);
rectangles.add(newRectangle);
System.out.println("Test");
}
}
我希望你能帮助我以正确的方式删除矩形,这样当它们与一个新的相交时它们就会消失......
答案 0 :(得分:0)
对于这种情况抱歉的朋友......我在drawRectangle-Method中创建了一个额外的矩形,并将其添加到我的矩形中。我删除了两行,现在它工作正常......