所以,我正试图在游戏中使用矩形对墙进行碰撞,我决定尝试使用ArrayList来存储每个墙的矩形,然后我将整个区域变为墙,所有我想做的是删除三个墙,所以我正在做shapeList.remove(0)尝试删除0,0的第一个墙,但它不工作,我不知道我做错了,或者如果有更好的方法,但我可以使用一些帮助来解决这个问题,这里是代码。
public void walls(Graphics g) {
for (int i = 0; i < 63; i++) {
for (int wallsX = 0; wallsX < 750; wallsX += 95) {
for (int wallsY = 0; wallsY < 750; wallsY += 95) {
shapeList.add(new Rectangle(wallsX, wallsY, 95, 95));
g.setColor(Color.blue);
g.drawRect(wallsX, wallsY, 95, 95);
}
}
}
shapeList.remove(0); //I want to remove wall at 0,0... but not working
g.setColor(Color.black);
g.fillRect(0, 0, 95, 95);
g.fillRect(95, 0, 95, 95);
g.fillRect(0, 95, 95, 95);
for (int i = 0; i < shapeList.size(); i++) {
if (intersectsBox(getRectangle(), shapeList.get(i))) {
isInsideWalls = true;
}else{
isInsideWalls = false;
}
}
}
编辑:当我运行此代码时,会出现此错误:
`Exception in thread "AWT-EventQueue-0" Exception in thread "Timer-0" java.lang.NullPointerException
at java.awt.Rectangle.intersects(Unknown Source)
at bombermangame.Game.intersectsBox(Game.java:122)
at bombermangame.Game.walls(Game.java:147)
at bombermangame.Game.paintComponent(Game.java:161)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
答案 0 :(得分:1)
以下循环将需要删除,因为它会创建63个墙网格副本。这意味着您指定的每个坐标都包含63个矩形。
for (int i = 0; i < 63; i++) {
删除for循环的原因将至少解决您的一个问题,因为当您删除第一个矩形时,在同一坐标处有62个矩形。
您需要创建的墙壁列表如下:
for (int wallsX = 0; wallsX < 750; wallsX += 95) {
for (int wallsY = 0; wallsY < 750; wallsY += 95) {
shapeList.add(new Rectangle(wallsX, wallsY, 95, 95));
g.setColor(Color.blue);
g.drawRect(wallsX, wallsY, 95, 95);
}
}
现在,您申请shapeList.remove(0);
坐标(0,0)上不应有墙。
您的代码中可能存在其他错误,但我不知道。我只查看了您在问题中提供的代码。