我知道的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;
}
}
但是,出于某种原因会发生这种情况。
当我直接去了其他实体下,它承认为此通过地面使得玩家掉落的另一实体。我花了好几个小时的时间试图查看上面代码中出错的地方,我似乎无法找到为什么它将顶层实体识别为最接近的实体。在这方面的任何帮助是非常有帮助的!