Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao executar app logo após criar o pássaro

Segui exatamente o mesmo código que o da aula, entretanto, não aparece o pássaro (bolinha vermelha).

Segue abaixo o meu código:

MainActivity

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.container) FrameLayout container;
    private Game game;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        game = new Game(this);
        container.addView(game);

    }

    @Override
    protected void onResume() {
        super.onResume();
        this.game.inicia(); //começo o jogo
        new Thread(game).run();
    }

    @Override
    protected void onPause() {
        super.onPause();
        this.game.pausa();
    }
}

Game.java

public class Game extends SurfaceView implements Runnable{

    private boolean isRunning = true;
    private SurfaceHolder holder = getHolder();
    private Passaro passaro;


    public Game(Context context) {
        super(context);
        inicializaElementos();
    }

    private void inicializaElementos() {
        passaro = new Passaro();
    }



    @Override
    public void run() {
        while(isRunning){
            if (!holder.getSurface().isValid()) continue;
            Canvas canvas = holder.lockCanvas();

                //desenho e gerenciamento dos componentes do jogo
                passaro.desenhaNo(canvas);

                passaro.cai();

                holder.unlockCanvasAndPost(canvas); //faz o canvas aparecer na tela (os componentes criados)


        }
    }

    public void inicia() {
        isRunning = true;
    }

    public void pausa() {
        isRunning = false;
    }
}

Passaro.java

public class Passaro {

    private static final int X = 100;
    private static final int RAIO = 50;
    private static final Paint VERMELHO = Cores.getCorDoPassaro();

    private int altura;

    public Passaro() {
        this.altura = 100;
    }

    public void desenhaNo(Canvas canvas) {
        canvas.drawCircle(X, altura, RAIO, VERMELHO);
    }

    public void cai() {
        this.altura += 5;
    }
}
2 respostas

Esse é o resto do meu código:

Cores.java


public class Cores {

    public static Paint getCorDoPassaro() {
        Paint vermelho = new Paint();
        vermelho.setColor(0xFFFF0000);
        return vermelho;
    }
}
solução!

Na MainActivity no método onResume(), eu fazia o seguinte:

new Thread(game).run();

Mas o correto seria:

new Thread(game).start();

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software