gpt4 book ai didi

java - 与矩形碰撞。相交 [Java]

转载 作者:行者123 更新时间:2023-12-01 11:39:26 29 4
gpt4 key购买 nike

所以,我尝试使用矩形在游戏中对墙壁进行碰撞,我决定尝试使用 ArrayList 来存储每面墙的矩形,然后我将整个 field 设为一面墙,并且所有我想做的是删除三堵墙,所以我正在执行 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)

最佳答案

下面的循环需要删除,因为它会创建 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) 处不应再有墙壁。

您的代码中可能还存在我不知道的其他错误。我只查看了您在问题中提供的代码。

关于java - 与矩形碰撞。相交 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663502/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com