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

Dúvida no Ex. 7 da Aula 1 - Criando o Jumper

Está dando erro nas seguintes linhas:

Não está achando os métodos getHolder() , getSurface(), lockCanvas(), e unlockCanvasAndPost();

6 respostas

Para obter um SurfaceHolder com o metodo getHolder, veja se a sua classe Game é filha de SurfaceView.

Os métodos getSurface, lockCanvas e unlockCanvasAndPost pertencem à essa classe SurfaceHolder.

Já está herdado, mas ainda continua o erro.

Poderia postar a sua classe Game pra eu dar uma olhada?

package br.com.alura.jumper.engine;
import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import br.com.alura.jumper.elementos.*;

public class Game extends SurfaceView implements Runnable{
    private final SurfaceView holder = (SurfaceView) getHolder();
    private boolean isRunning = true;
    private Passaro passaro;

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

    }

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

    public void run(){
        while(isRunning){
            if(!((SurfaceHolder) holder).getSurface().isValid())continue;    
            Canvas canvas = ((SurfaceHolder) holder).lockCanvas();
            passaro.desenhoNo(canvas);
            passaro.cai();
            ((SurfaceHolder) holder).unlockCanvasAndPost(canvas);
        }
    }

    public void inicia(){
        this.isRunning = true;
    }
    public void cancela(){
        isRunning = false;
    }


}
solução!

Na primeira linha da sua classe:

private final SurfaceView holder = (SurfaceView) getHolder();

Não precisa fazer esse cast pra SurfaceView. Deixe assim:

private final SurfaceHolder holder = getHolder();

Com isso, você encontrará os métodos, deixando seu código com essa cara:

if(!holder.getSurface().isValid())continue;    
Canvas canvas = holder.lockCanvas();
passaro.desenhoNo(canvas);
passaro.cai();
holder.unlockCanvasAndPost(canvas);

lembre-se do SHIFT + CTRL + O

para criar os imports de forma automática sempre selecionando os itens grifados em vermelho.