首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与rectangle.intersects的碰撞

与rectangle.intersects的碰撞
EN

Stack Overflow用户
提问于 2015-04-16 00:52:45
回答 1查看 631关注 0票数 0

所以,我试着用矩形为游戏中的墙壁做一个碰撞,我决定用ArrayList来存储每个墙的矩形,我把整个字段变成一个墙,我想要做的就是移除三堵墙,所以我正在做shapeList.remove(0)来尝试移除0,0的第一道墙,但它不起作用,我不知道我是不是做错了,或者这是一个更好的方法,但是我可以用一些帮助来解决这个问题,下面是代码。

代码语言:javascript
复制
    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;
        }
    }
}

编辑:当我运行此代码时,会出现以下错误:

代码语言:javascript
复制
`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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 01:47:32

下面的循环将需要删除,因为它创建了63个副本的墙壁网格。这意味着,您指定的每个坐标都将包含63个矩形。

代码语言:javascript
复制
 for (int i = 0; i < 63; i++) {

删除for循环将修复至少一个问题的原因是,当您删除第一个矩形时,仍有62个矩形位于相同的坐标下。

创建墙壁列表所需的全部内容如下:

代码语言:javascript
复制
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)上不应该有墙。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29663502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档