Pular para o conteúdo principal

Usando Laser e LaserHit (Java)

O sistema de laser se comporta como um raycast: você dispara uma linha invisível e o motor informa se ela atingiu algo. Métodos de Component como repeat() rodam a cada frame, o que torna os lasers fáceis de usar em lógicas de jogo que atualizam continuamente.

Exemplo (para iniciantes)

O exemplo abaixo cria um Laser, dispara dentro de repeat() e trata o caso em que nada é atingido capturando NoHitException.

public class LaserExample extends Component {
private final Laser laser = new Laser();

@Override
public void repeat() {
try {
LaserHit hit = laser.trace(myObject.getGlobalPosition(), myObject.getForward());

// Use o hit imediatamente (ex.: ler ponto de impacto, collider, etc.).
// Aqui é onde você reage à colisão.
} catch (NoHitException exception) {
// Nada foi atingido neste frame. Decida o que fazer aqui.
}
}
}

Por que não armazenar LaserHit globalmente?

Para iniciantes, pode parecer conveniente guardar o LaserHit em uma variável global e usar depois, mas isso não é uma boa prática porque os dados do hit podem ficar desatualizados após o próximo frame. Lasers devem ser avaliados por frame, então você deve usar o hit logo após o trace.

Se você realmente precisar guardar para usar depois, sempre verifique se existe:

LaserHit cachedHit = null;

// Depois...
if (cachedHit != null) {
// Seguro usar cachedHit
}

Essa verificação de null evita erros quando nenhum hit aconteceu e mantém seu código seguro para iniciantes.