Isso significa que você precisa lidar com uma unidade / entidade selecionada pelo jogador com um clique do mouse. Para fazer esse truque (sujo), certifique-se de que sua classe de unidade tenha um campo identificador como String ou inteiro ou outro. Suponha que já temos a coordenada do clique (x, y) e String como identidade da unidade. Como a unidade pode fazer parte do Palco , você pode colocá-la em um grupo (digamos, unitGroup ).
Primeiro, crie uma “coleção” para “lembrar” as posições de todas as unidades. Os dados de posição podem ser Vector2 .
HashMap<String, Vector2> units;
Então você pode agrupar uma unidade que clicou em (x, y).
public Unit findByLocation(float x, float y) {
Unit unit = null;
for (Entry<String, Vector2> maps : units.entrySet()) {
Vector2 v = maps.getValue();
if (x > v.x && y > v.y && x < v.x + SPRITE_.SIZE && y < v.y + SPRITE_.SIZE) {
unit = (Unit) unitGroup.findActor(maps.getKey());
return unit;
}
}
return unit;
}
A principal desvantagem desse método é que precisamos atualizar a posição da unidade na coleção quando alterada.
public void updateUnitPosition(Unit unit) {
Vector2 v = units.get(unit.name);
v.x = unit.x;
v.y = unit.y;
}