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
列表,就无法进一步帮助您。。。