java - 由于某种原因,检查碰撞(同一坐标中是否有对象)会在几秒钟内使 java 崩溃

标签 java

已解决 我正在开发自己的 java 游戏引擎,它有自己的“物理引擎”,出于某种原因,我检查碰撞的新方法会导致 java 崩溃吗?

我对java相当陌生,我不知道发生了什么,我没有在代码中看到任何问题,我也不认为我会看到它。

完整的源代码可以在 github 上找到。

gameobject.java中的函数:

private void checkAdvancedCollisions(objectManager o, gameObject i){
        if(!i.masterParent.engine_collisions){
            return;
        }
        LinkedList<String> ignore = tag;
        for(gameObject ga : children){
            ignore.addAll(ga.tag);
        }
        for(int xc : new Range(size)){
            for(int yc : new Range(size)){
                if(o.colliding(Math.round(i.x + xc), Math.round(i.y + yc), ignore)){
                    point1(i, o.collidingGA(xc, yc, ignore));
                }
                else if(o.colliding(Math.round(i.x + xc), Math.round(i.y + yc + 1), ignore)){
                    point2 = true;
                    point2(i, o.collidingGA(Math.round(i.x + xc), Math.round(i.y + yc + 1), ignore));
                }
                else{
                    colliding = false;
                    point2 = false;
                }
            }
        }
    }

objectmanager.java 中的实际检查(应该可以正常工作):

public boolean colliding(int x, int y, LinkedList<String> ignore){
        for(gameObject i : object){
            if(i.getTag().contains("cursor") || i.getTag().containsAll(ignore)){}
            else{
                if((round(i.x) == x && round(i.y) == y)){
                    return true;
                }
            }
        }
        return false;
    }
    public gameObject collidingGA(int x, int y, LinkedList<String> ignore){
        for(gameObject i : object){
            if(i.getTag().contains("cursor") || i.getTag().containsAll(ignore)){}
            else{
                if((round(i.x) == x && round(i.y) == y)){
                    return i;
                }
            }
        }
        return null;
    }

当使用这个函数时,java完全停止,没有错误消息或任何东西

最佳答案

感谢 Joop Eggen 指出忽略列表可能包含无穷无尽的内容。 该代码是将子级的所有标签添加到列表中,而所有游戏对象都是其自身的子级,从而导致无限列表。

关于java - 由于某种原因,检查碰撞(同一坐标中是否有对象)会在几秒钟内使 java 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095899/

相关文章:

java - 为什么包名经常以 "com"开头

java - 我们如何验证使用 selenium rc mouseOver 事件显示的链接

Java/Android自命名

Java在多显示器环境中获取鼠标位置

java - Android - 键盘没有出现在 float 窗口中

java - 安卓加密

java - OffsetDateTime 在 GET 方法中产生 "No injection source found for a parameter of type public javax.ws.rs.core.response"

java - 导出到 .JAR 时不会抓取资源

java - 如何使用自定义注释存储和加载加密值

java - 修改来自另一个Android类的自定义 View