Java 增加render()中的变量并删除矩形和图像

Java 增加render()中的变量并删除矩形和图像,java,libgdx,render,collision,Java,Libgdx,Render,Collision,我想在任何重叠期间提出一个可变硬币。 问题是,硬币是一个图像,不能只增加一次,使我的硬币增加至少10/11倍。 我的目标是删除图片,然后删除矩形,正如我在下面的代码中所做的那样。问题是,如果我删除矩形,那么我甚至无法识别硬币上的重叠部分。我该怎么修理 render() .... if(!monetaRectangles.isEmpty() && !monetaImages.isEmpty()) { for (int i =

我想在任何重叠期间提出一个可变硬币。 问题是,硬币是一个图像,不能只增加一次,使我的硬币增加至少10/11倍。 我的目标是删除图片,然后删除矩形,正如我在下面的代码中所做的那样。问题是,如果我删除矩形,那么我甚至无法识别硬币上的重叠部分。我该怎么修理

render()
....
    if(!monetaRectangles.isEmpty() && !monetaImages.isEmpty()) {
                        for (int i = 0; i < monetaRectangles.size(); i++) {
                            monetaRectangles.get(i).setX(monetaImages.get(i).getX());
                            monetaRectangles.get(i).setY(monetaImages.get(i).getY());

                            if (surferRectangle.overlaps(monetaRectangles.get(i))) {
                                contatoreMonete++;
                                monetaRectangles.remove(i);
                                monetaImages.get(i).remove();
                                moneteLabel.setText("Monete: " + contatoreMonete);
                            }
                        }
                    }
...
end render()
render()
....
如果(!monetaRectangles.isEmpty()&&!monetaImages.isEmpty()){
对于(int i=0;i

dell'overlaps对象的持续时间为1秒,因此我正确地增加了每个渲染的变量,您可能想解决?我缺少逻辑

您在对集合进行迭代时正在对其进行修改。(使用libGDX集合,这样就不会每次都创建新的迭代器)

for(inti=0;i
对保留图像和矩形之间关系的对象集合使用迭代器。然后您可以执行Iterator.remove(),并正确地进行迭代

一些一般性的建议-你似乎试图保持你的物理/游戏世界的“位置”与你的图像的“位置”同步,反之亦然

我建议将游戏对象重新架构为“渲染数据”、“物理/世界数据”和“游戏逻辑数据/过程”的组合。然后,将公共属性集中到双方都可以访问的组件中。职位是这类数据的常见候选者。现在,当您更新位置时,使用该位置的所有内容也将更新


Ashley是一个LibGDX项目,可以帮助实现这一点,它指向本文对此进行了解释:

将删除的矩形存储在另一个列表中?不,我不将矩形存储在另一个列表中。我向您建议这种技术。啊,我现在才明白,目前硬币已经在另一个列表中,这是您在请求正文中看到的。
for (int i = 0; i < monetaRectangles.size(); i++) { //
    monetaRectangles.get(i).setX(monetaImages.get(i).getX());// if you removed 'i' in the previous loop this will effectively get i+2 of the original
    monetaRectangles.get(i).setY(monetaImages.get(i).getY());

    if (surferRectangle.overlaps(monetaRectangles.get(i))) {
        contatoreMonete++;
        monetaRectangles.remove(i); //The semantics of 'i' is now changed.
        monetaImages.get(i).remove();//also here
        moneteLabel.setText("Monete: " + contatoreMonete);
    }
}