TransWikia.com

Como calculo o ângulo de um objeto em java?

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);
    }
}

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP