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

Asked

Viewed 39 times

1

I got 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:

IDE mostrando o erro

How do I pass that parameter of Direcao to the other class? Ali says it is incompatible.

  • 1

    what happens is that the Enum Direction of the Bullet class and the Bomb class are although similar, different due to the class, in terms of sole responsibility, the ideal would be for you to do this Enum in a separate class

  • I’ll test it! I didn’t know about Enum

  • I managed, thank you very much, the solution was to create a class for same Direction.

1 answer

1


Changing the order of the arguments will solve:

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

I put in the Github for future reference.

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

  • I fixed the order and the problem persists. I think it was just silly of me to paste here, the order of things, but I already solved and the problem is the same.

  • I got the question just like I did in the code

  • 2

    Try to have that Enum outside the classes, it makes no sense to have it in, if it is part of the API in more than one class it is very wrong to be internalized. It should be public anyway. Anyway I do not trust what you are posting, after all already posted one thing and said another. , what speak may be right or may be only a version of what actually occurs.

  • I will test this Maniero. I’m sorry, don’t understand, am I being unreliable? Weight sorry then, I just made the correction you suggested.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.