gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:01 24 4
gpt4 key购买 nike

已解决我正在开发自己的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com