Stack Overflow em Português Asked by caique dias on November 10, 2021
No caso eu estou fazendo um jogo e tenho um player e um inimigo (o inimigo não se move). Gostaria que o inimigo sempre atira-se em direção ao player e para isso preciso achar o ângulo do inimigo.
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import com.caique.main.Game;
import com.caique.main.Sound;
import com.caique.world.Camera;
public class Plant extends Entity{
private int frames = 0, maxFrames = 10, index = 0, maxIndex = 1;
private BufferedImage[] sprites;
public static boolean isShooting = false;
public Plant(int x, int y, int width, int height, BufferedImage sprite) {
super(x, y, width, height, null);
sprites = new BufferedImage[2];
sprites[0] = Game.spritesheet.getSprite(16, 64, 16, 16);
sprites[1] = Game.spritesheet.getSprite(32, 64, 16, 16);
}
public void tick() {
frames++;
if(frames == maxFrames) {
frames = 0;
index++;
if(index > maxIndex) {
index = 0;
}
}
// Aqui aonde quero verificar se está atirando e calcular o ângulo.
if(isShooting) {
isShooting = false;
double angle = Math.atan2(Game.player.y - (this.getY() + 8 - Camera.y), Game.player.x - (this.getX() + 8 - Camera.x));
double dx = Math.cos(angle);
double dy = Math.sin(angle);
int px = 0;
int py = 0;
BulletShooting bullet = new BulletShooting(this.getX() + px, this.getY() + py, 3, 3, null, dx, dy);
Game.bullets.add(bullet);
}
}
public void render(Graphics g) {
g.drawImage(sprites[index], this.getX() - Camera.x, this.getY() - Camera.y, null);
}
}
Usar Math.atan() retorna o valor em radianos, porém você precisa do valor em graus. Faça o seguinte para encontrar o ângulo em graus.
public double calculaAnguloEmGraus(double x, double y) {
double radiano = Math.atan(y/x);
// converter de radianos para graus
double graus = Math.toDegrees(radiano);
return graus;
}
Answered by Guifling on November 10, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP