Incompatible types when trying to start a class with the value of the "switch" of another Java

1

I have the following:

public class Bullet {
    public enum Direcao { UP,DOWN,LEFT,RIGHT };
    // Posição do tiro em pixels.
    private int x,y;
     // Direção do tiro.
    private Direcao direção;
    // Este tiro está ativo?
    private boolean estáAtivo;
    // Tamanho do tiro em pixels.
    private int iw,ih;
    // Imagem do tiro.
    private Image icon;
    // área do painel do jogo (para controlar movimento).
    private Dimension area;

    // Construtor, inicializa atributos, cria a bala.
    public Bullet(Dimension a,Direcao dir, int x,int y){
        area = a;
        icon = new ImageIcon(getClass().getResource("/gamejava.Sprites/bullet.png")).getImage();
        iw = icon.getWidth(null);
        ih = icon.getHeight(null);
        // x e y passados direto como argumentos
        this.x = x;
        this.y = y;
        direção = dir;
        estáAtivo = true;
    }

    // Método que movimenta a bala.
    public void move(){
        if (!estáAtivo) return;
        switch(direção){
            case LEFT:
                {
                    x -= 3; if (x < 0) estáAtivo = false; break;
                }
            case RIGHT:
                {
                    x += 3; if (x > area.width) estáAtivo = false; break;
                }
            case UP:
                {
                    y -= 3; if (y < 0) estáAtivo = false; break;
                }
            case DOWN:
                {
                    y += 3; if (y > area.height-100) estáAtivo = false; break;
                }
        } 
    }

and also:

public class Bomb {
    public enum Direcao { UP,DOWN,LEFT,RIGHT };
    // Posição da bomba em pixels.
    private int x,y;
    // Esta bomba está ativa?
    private boolean estáAtivo;
    // Tamanho da bomba em pixels.
    private int iw,ih;
    // Imagem da bomba.
    private Image icon;
    // área do painel do jogo (para controlar movimento).
    private Dimension area;
    // Construtor, inicializa atributos, cria a bomba.

    public Bomb(Dimension a,int x,int y){
        area = a;
        icon = new ImageIcon(getClass().getResource("/gamejava.Sprites/bomb.png")).getImage();
        iw = icon.getWidth(null);
        ih = icon.getHeight(null);
        // x e y passadas diretamente como parâmetros
        this.x = x;
        this.y = y;
        estáAtivo = true;
    }

    // Método que movimenta o shooter, verificando se está na área válida.
    public void move(Direcao dir){
        if (dir == null) return;
        switch(dir){
            case LEFT:
                { x--; 
                if (x < iw/2) x = iw/2; 
                break; }
            case RIGHT:
                { x++; if (x > area.width-iw/2) x = area.width-iw/2; break; }
            case UP:
                { y--; if (y < area.height-100+ih/2) y = area.height-100+ih/2; break; }
            case DOWN:
                { y++; if (y > area.height-ih/2) y = area.height-ih/2; break; }
        }
    }
    // Método que movimenta a bomba.
    public void move(){
        if (!estáAtivo) return;
        y = y-3;
        if (y <= 0) estáAtivo = false;
    }
    // Método que desenha a bomba em um contexto gráfico.
    public void draw(Graphics g){
        if (estáAtivo) g.drawImage(icon,x-iw/2,y-ih/2,null);
    }
    // Precisamos saber se esta bomba está ativa!
    public boolean estáAtivo() {
        return estáAtivo; 
    }
    // Verificamos se a bomba está perto de um Invader
    public boolean acertouEm(Invader i){
        int ox = i.getX(); int oy = i.getY();
        return (Math.sqrt((x-ox)*(x-ox)+(y-oy)*(y-oy)) < 25);
    }

    // Explodimos a bomba (retornando bullets).
    public ArrayList<Bullet> explode(){
        ArrayList<Bullet> novasBalas = new ArrayList<Bullet>(4);
        novasBalas.add(new Bullet(area, Direcao.LEFT, x, y));
        novasBalas.add(new Bullet(area, Direcao.RIGHT, x, y));
        novasBalas.add(new Bullet(area, Direcao.UP, x, y));
        novasBalas.add(new Bullet(area, Direcao.DOWN, x, y));
        estáAtivo = false;
        return novasBalas;
    }
}

Two separate classes, Bullet and Bomb . In the Bomb class, the explode method is showing the following error in my NetBeans:

How do I pass that parameter from Direcao to the other class? Ali says it's incompatible.

    
asked by anonymous 30.10.2018 / 21:07

1 answer

1

Changing the order of the arguments will solve:

novasBalas.add(new Bullet(area, x, y, Direcao.LEFT));

Note that the direction is the last parameter in the constructor of the Bullet class, so the argument with this value should appear last, not second as it is in your example. Obviously need to do in the 4.

    
30.10.2018 / 21:18