当我尝试在我的播放器附近找到精灵时,我遇到了麻烦。我有一个小地图和侧面滚动。只有成长和中间球员。他可以看起来向左或向右走,如果你的球员向左看并且你按下“击球”,我会在我的玩家链接列表中搜索最接近我的玩家的暴徒,我会让这个暴徒接受损坏。
我有这个代码: - 小怪是我的怪物链接列表。 (AnimatedSprite的扩展)
这是我的第一个游戏,我不知道是否有更好的方法来做到这一点,这不要搜索越近,只有我的列表的第一个元素,任何想法? :)
public void shot(){
float playerx = player.getX();
Mob target = mobs.element();
if(player.getDireccion()==Entidad.DIR_IZQUIERDA){//If direction if left
for(Mob z:mobs){
if(z.getX()<playerx &&
z.getX()>target.getX())
target= z;
}
}else if(player.getDireccion()==Entidad.DIR_DERECHA){//If direction is right
for(Mob z:mobs){
if(z.getX()>playerx && z.getX()<target.getX())
target= z;
}
}
target.recibeDaño();//receibe damaget (loss life basically)
if(objetivo.getVida()<=0){ //These delete body and sprite of the game
final Mob eliminar = target;
eliminarZombie(eliminar,this);
mobs.remove(target);
System.gc();
}
}
对不起我的英语。
答案 0 :(得分:1)
遍历所有敌人并计算距离
距离= x2 - x1
其中x2是敌人的x属性,x1是玩家的x属性
如果你面向正确,只考虑正距离,如果你面向左边,只考虑负距离
然后选择距离的最小绝对值
所以它就是这样的
float shortest = 1000; //just put a large number here
for(Mob z:mobs){
distance = z.x - player.x;
if((player.getDirection == Direction.RIGHT) && distance > 0 && distance < shortest){
//set the target to the current mob and change the value of the shortest
}
if((player.getDirection == Direction.LEFT) && distance < 0 && Math.abs(distance) < shortest){
//same as above
}
}
//damage the target here and remove it
注意我没有处理目标在敌人之上且距离== 0
的情况你的代码也应该工作,但不是循环遍历列表两次,最好循环一次
关于您的代码的其他说明是: