Está dando erro nas seguintes linhas:
Não está achando os métodos getHolder() , getSurface(), lockCanvas(), e unlockCanvasAndPost();
Está dando erro nas seguintes linhas:
Não está achando os métodos getHolder() , getSurface(), lockCanvas(), e unlockCanvasAndPost();
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;
}
}
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.