Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当发生碰撞时,如何消除图像?_Java_Image_Collision Detection - Fatal编程技术网

Java 当发生碰撞时,如何消除图像?

Java 当发生碰撞时,如何消除图像?,java,image,collision-detection,Java,Image,Collision Detection,我有两个图像在水平方向上移动。每当两个图像之间发生冲突时,我希望它们消失,这就是我的问题。有人能帮我怎么做吗 顺便说一下,这是我的代码。如果您愿意,可以查看: private boolean checkCollisions() { for (Sprite r1 : z_sorted_sprites) { for (Sprite r2 : z_sorted_sprites) { if (r1 == r2)

我有两个图像在水平方向上移动。每当两个图像之间发生冲突时,我希望它们消失,这就是我的问题。有人能帮我怎么做吗

顺便说一下,这是我的代码。如果您愿意,可以查看:

private boolean checkCollisions()
{
    for (Sprite r1 : z_sorted_sprites)
    {
        for (Sprite r2 : z_sorted_sprites)
        {
            if (r1 == r2)
            {
                continue;
            }

            RectangleX me = r1.getBounds();
            RectangleX other = r2.getBounds();

            if (me.intersects(other))
            {
                collision = true;

                System.out.println("collision : " + r1.getName() + " with " + r2.getName());

                // disappear(me,other);
            }
            else
            {
                collision = false;
                System.out.println("no collision");
            }
        }

    }
    return collision;
}
请尝试以下操作:

if(!checkCollisions()){
   //draw your sprites
   //g.drawImage(...);
}
绘制(图形g)
方法中,执行以下操作:

if(!checkCollisions()){
   //draw your sprites
   //g.drawImage(...);
}
在checkCollisions()方法中,在检测到冲突时调用repaint

if (me.intersects(other))
            {
                collision = true;

                System.out.println("collision : " + r1.getName() + " with " + r2.getName());

                repaint();
            }

因为您在同一个集合上迭代了两次,我很确定您必须通过构建要删除的项列表来解决这个问题,然后在检测到所有冲突后删除它们

像这样:

private boolean checkCollisions()
{
    ArrayList<Sprite> toRemove = new ArrayList<Sprite>();

    for (Sprite r1 : z_sorted_sprites)
    {
        for (Sprite r2 : z_sorted_sprites)
        {
            // ...
            if (me.intersects(other))
            {
                // ...
                toRemove.add(r1);
                toRemove.add(r2);
            }
            else
            {
                // ...
            }
        }
    }

    z_sorted_sprites.removeAll(toRemove);

    return collision;
}

顺便问一下,您确定您的返回值返回您认为的值吗?当前它将返回false,除非列表中的最后两个精灵发生碰撞。如果您希望在有任何冲突的情况下返回true,请去掉行
collision=false返回碰撞次数的计数可能更有用,但我将此留给您……

“我希望它们消失”停止执行任何使它们出现的操作。为了更快地获得更好的帮助,发布一个。你说的“希望它们消失”是指它应该立即隐藏,或消失,或消失在烟雾中,还是在碰撞过程中根本不出现?当你不得不猜测问题是什么时,很难回答。@Stein我的意思是,一旦发生碰撞,它就永远不会出现。但我的两张照片来自不同的班级,一个是狗班,一个是猫班。为什么会有什么不同呢?如果不知道如何创建/更新
z_sorted_sprites
列表,就无法进一步帮助您。。。