当前位置: 首页 > 知识库问答 >
问题:

如何检测对象之间的碰撞[重复]

拓拔嘉颖
2023-03-14

我需要检测一个球(椭圆形)和多个块(矩形)之间的碰撞。在游戏中表示块的类块中,我有以下代码来检测碰撞(其简短版本,仅用于演示示例):

    if(ballYPos <= blockYPos 
         && ballYPos >= blockYPos 
         && ballXPos >= blockXPos
         && ballXPos+ballWidth <= blockXPos+blockWidth) {
   collision
   }

碰撞不好,因为椭圆形,但一般来说,我想问是否有东西在java(摇摆)检测碰撞,我的意思是如果矩形没有完全显示在画布上,这意味着球重叠一个块坐标

共有2个答案

丌官浩旷
2023-03-14

矩形java.awt.类有一个相交方法(矩形r),当两个矩形占据相同的空间(源)时,该方法返回true。我想你可以根据你的需要调整它。

高化
2023-03-14

方法Shape.intersects()可用于确定形状是否与任何矩形相交。幸运的是,它也可以用于非矩形形状,如椭圆。这里有一个例子:

public class IntersectExample extends JFrame {
    public IntersectExample() {
        add(new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                Shape oval = new Ellipse2D.Double(10, 10, 200, 200);
                Shape rect = new Rectangle2D.Double(190, 190, 200, 200);
                Graphics2D g2 = (Graphics2D) g;
                g2.draw(oval);
                g2.draw(rect);
                System.out.println(oval.intersects(rect.getBounds()));
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 400);
            }
        });
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        new IntersectExample().setVisible(true);
    }
}

看起来像这样。。。

...并将false打印到控制台。这表明,不仅要比较边界矩形,还要比较实际形状区域。

 类似资料:
  • 我的游戏有两个职业,它们都产生精灵,唯一的区别是它们的精灵向不同的方向移动。 然而,我如何检测另一个类的精灵是否与这个类碰撞,两个类都产生了很多精灵。我的想法是也使用池为每个精灵创建一个矩形。

  • 在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)

  • 使用< code >加速计,我的精灵图像会左右移动,如果我触摸屏幕,精灵会移动到Y轴。我想在不同的精灵之间进行碰撞检测,这样如果精灵穿过一个物体,它就会停下来藏在那个物体里。我已经看了这个https://www.youtube.com/watch?v=T1aN-vTqLc的教程,但什么也没发生。进行碰撞检测的正确方法是什么?我不知道我的编码有什么问题。任何建议或更好的教程谢谢和进步 这是我的编码

  • 这两个球在画布上弹来弹去。 如果球碰撞了,帆布应该说游戏结束。 这是一个代码,我已经为碰撞到目前为止

  • 我已经在这里呆了2-3周了,我仍然无法进行适当的碰撞检测。我用矩形创建了一个迷宫。我希望我的对象(在矩形中)每当我的对象与任何墙壁碰撞时停止,并能够移动到任何地方(或滑下墙壁)。我的墙壁(矩形)具有负坐标,如下所示: 我目前正在使用SO中发现的重叠方法。以下是我的CollisionManager类中的方法: 我有一个功能可以保存对象所做的所有位置移动。因此,当发生碰撞时,对象会恢复到最后一次移动之

  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect