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

Canos aleatorizando a altura frame a frame

A altura dos meus canos está sendo alterada frame a frame após adicionar o incremento com o valor aleatório.

Minha principal dúvida é o porquê isso não ocorre nos vídeos, já que o método que desenha os canos aleatoriza o tamanho e este é realmente chamado frame a frame no game loop.

Seguem trechos do meu código:

Classe Cano

class Pipe(private val screen: Screen, private var position: Int) {

    private val pipeHeight = 250
    private val pipeWidth = 100

    private val bottomPipeTop: Int
    get() = (screen.height - pipeHeight).minus(Random.nextInt(150))

    private val topPipeBottom: Int
    get () = pipeHeight.plus(Random.nextInt(150))

    fun drawTopPipeTo(canvas: Canvas) {
        canvas.drawRect(position.toFloat(), 0f, position + pipeWidth.toFloat(), topPipeBottom.toFloat()
            , GamePaint.pipeColor)
    }

    fun drawBottomPipeTo(canvas: Canvas) {
        canvas.drawRect(position.toFloat(), bottomPipeTop.toFloat(), position + pipeWidth.toFloat(), screen.height.toFloat(), GamePaint.pipeColor)
    }

    fun move() {
        position -= 5
    }
}

Classe Canos

package tech.pucci.jumper.elements

import android.graphics.Canvas
import tech.pucci.jumper.graphics.Screen

class Pipes(private val screen: Screen) {

    private val pipes: ArrayList<Pipe> = ArrayList()
    private val quantity: Int = 5
    private val distance: Int = 230

    init {
        addPipes()
    }

    private fun addPipes() {
        for (x in 1..quantity) {
            pipes.add(Pipe(screen, x * distance))
        }
    }

    fun drawTo(canvas: Canvas) {
        pipes.forEach {pipe ->
            pipe.drawBottomPipeTo(canvas)
            pipe.drawTopPipeTo(canvas)
        }
    }

    fun move(){
        pipes.forEach { pipe -> pipe.move() }
    }
}

Game Loop

    override fun run() {
        while(isRunning){
            if(!holder.surface.isValid) continue

            val canvas = holder.lockCanvas()

            canvas.drawBitmap(background, 0f, 0f, null)
            pipes.drawTo(canvas)
            bird.drawTo(canvas)
            pipes.move()
            bird.fall()

            holder.unlockCanvasAndPost(canvas)
        }
    }
2 respostas

Oi João, tudo bem ?

Cara eu vi que sua dúvida é um pouco antiga, será que tu já resolveu ? Se sim pode compartilhar conosco ?

solução!

A verdade é que nem lembro mais do contexto. Vou fechar a questão e caso ressurja em algum outro momento reabro :)

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