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

Canos superiores não encostam no topo

Boa tarde

Estou com um probleminha, os canos superiores não estão encostando na parte superior do celular e está variando a posição acho q do aleatório como o tamanho também, mesmo estando na posição zero não subiu... desde já agradeço ... abaixo a classe cano...

package br.com.alura.jumper.elements;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;

import br.com.alura.jumper.R;
import br.com.alura.jumper.graphic.Cores;
import br.com.alura.jumper.graphic.Tela;

public class Cano {

    private Tela tela;
    private int alturaDoCanoInferior;
    private int alturaDoCanoSuperior;
    private static final  int TAMANHO_DO_CANO = 250;
    private static final int LARGURA_DO_CANO = 100;
    private static final Paint VERDE = Cores.getCorDoCano();
    private int posicao;
    private Bitmap canoInferior;
    private final Bitmap canoSuperior;

    public Cano(Tela tela, int posicao, Context context){
        this.tela = tela;
        this.posicao = posicao;
        alturaDoCanoInferior = tela.getAltura() - TAMANHO_DO_CANO - valorAleatorio();
        alturaDoCanoSuperior = 0 + TAMANHO_DO_CANO + valorAleatorio();
        Bitmap bp = BitmapFactory.decodeResource(context.getResources(), R.drawable.cano);
        canoInferior = Bitmap.createScaledBitmap(bp, LARGURA_DO_CANO, alturaDoCanoInferior, false);
        canoSuperior = Bitmap.createScaledBitmap(bp, LARGURA_DO_CANO, alturaDoCanoSuperior, false);
    }

    private int valorAleatorio() {
        return (int) (Math.random() * 150);
    }

    public  void desenhaNo(Canvas canvas){
        desenhaCanoInferiorNo(canvas);
        desenhaCanoSuperiorNo(canvas);
    }

    private void desenhaCanoSuperiorNo(Canvas canvas){
        //canvas.drawRect(posicao, 0, posicao + LARGURA_DO_CANO, alturaDoCanoSuperior, VERDE);
        canvas.drawBitmap(canoSuperior,posicao, alturaDoCanoSuperior, null);
    }

    private void desenhaCanoInferiorNo(Canvas canvas) {
        //canvas.drawRect(posicao, alturaDoCanoInferior, posicao + LARGURA_DO_CANO, tela.getAltura(), VERDE);
        canvas.drawBitmap(canoInferior,posicao, alturaDoCanoInferior, null);
    }

    public void move() {
        this.posicao -= 5;
    }

    public boolean saiuDaTela() {
        return posicao + LARGURA_DO_CANO < 0;
    }

    public int getPosicao() {
        return posicao;
    }

    public boolean temColisaoHorizontalCom(Passaro passaro) {
        return this.posicao < passaro.X + passaro.RAIO;
    }


    public boolean temColisaoVerticalCom(Passaro passaro) {
        return passaro.getAltura() - passaro.RAIO < this.alturaDoCanoSuperior
                && passaro.getAltura() + passaro.RAIO > this.alturaDoCanoInferior;

    }
}
2 respostas
solução!

Dê uma olhada no método desenhaCanoSuperiorNo:

private void desenhaCanoSuperiorNo(Canvas canvas){
    //canvas.drawRect(posicao, 0, posicao + LARGURA_DO_CANO, alturaDoCanoSuperior, VERDE);
    canvas.drawBitmap(canoSuperior,posicao, 0, null);
 }

E no desenhaCanoInferiorNo:

private void desenhaCanoInferiorNo(Canvas canvas) {
    //canvas.drawRect(posicao, alturaDoCanoInferior, posicao + LARGURA_DO_CANO, tela.getAltura(), VERDE);
    canvas.drawBitmap(canoInferior,posicao, alturaDoCanoInferior, null);
}

A variável alturaDoCanoInferior deve ter o valorAleatorio somado ao seu valor:

alturaDoCanoInferior = tela.getAltura() - TAMANHO_DO_CANO + valorAleatorio();

Obrigado foi falta de atenção da minha parte...