我知道的Box2D的,不能用於這項任務查找最接近實體向球員Libgdx的Java
現在,我試圖找到最接近Entity
我的球員。這是因爲碰撞檢測可以集中在最接近的實體上,而不是一次全部集中在一起。我認爲我這樣做的方式是正確的,但似乎有一些錯誤。 首先讓我給你看一些項目的圖片,這裏是玩家正確注意最接近的實體的圖像。
正如你所看到的,它完美地查找最近的實體(黃線指向實體的最接近側)
之前我展示的代碼,讓我解釋的幾個變量代碼和它在做什麼。所有Entity
都是從EntityStage
中抓取的。它們全部儲存在HashMap
中。我用一把鑰匙找到x和y軸上最接近的實體。然後我看到最後哪個更接近。 keyX
是x軸上最接近的實體的關鍵,y軸是keyY
。
public Entity player, entity;
private Vector2 tmpVec = new Vector2(), finKeyX = new Vector2(), finKeyY = new Vector2();
private Vector2 finalVec = new Vector2();
public void getClosestEntity(){
entityHash = entityStage.getMap();
player = entityHash.get("player");
String finalKey = "";
String keyX = "", keyY = "";
for(String key : entityHash.keySet())
if(!key.equals("player"))
keyX = keyY = key;
for(String key : entityHash.keySet()){
for(int i = 0; i < entityHash.size(); i++){
if(!key.equals(Player.KEY)){
entity = entityHash.get(key);
tmpVec.x = Math.abs(entity.getPosition().x - player.getPosition().x);
tmpVec.y = Math.abs(entity.getPosition().y - player.getPosition().y);
if(Math.abs(entityHash.get(keyX).getPosition().x - player.getPosition().x) > tmpVec.x){
keyX = key;
}
if(Math.abs(entityHash.get(keyY).getPosition().x - player.getPosition().x) > tmpVec.y){
keyY = key;
}
}
}
}
if(keyX.equals(keyY)){
finalKey = keyX;
}
finKeyX = entityHash.get(keyX).getPosition();
finKeyY = entityHash.get(keyY).getPosition();
// if KeyX is closer on X
if(Math.abs(finKeyX.x - player.getPosition().x) < Math.abs(finKeyY.x - player.getPosition().x)){
//If keyX is close on Y
if(Math.abs(finKeyX.y - player.getPosition().y) < Math.abs(finKeyY.y - player.getPosition().y)){
finalKey = keyX;
//if keyY is closer on Y
}else{
if(Math.abs(finKeyX.x - finKeyX.y) < Math.abs(finKeyY.y - finKeyY.x)){
finalKey = keyX;
}else
finalKey = keyY;
}
//if KeyY is closer on X
}else{
//if KeyY is closer on Y
if(Math.abs(finKeyX.y - player.getPosition().y) > Math.abs(finKeyY.y - player.getPosition().y)){
finalKey = keyY;
//if KeyX is closer on Y
}else{
if(Math.abs(finKeyX.x - finKeyX.y) < Math.abs(finKeyY.y - finKeyY.x)){
finalKey = keyY;
}else
finalKey = keyX;
}
}
但是,出於某種原因會發生這種情況。
當我直接去了其他實體下,它承認爲此通過地面使得玩家掉落的另一實體。我花了好幾個小時的時間試圖查看上面代碼中出錯的地方,我似乎無法找到爲什麼它將頂層實體識別爲最接近的實體。在這方面的任何幫助是非常有幫助的!