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