Tener problemas para intentar hacer que un círculo se mueva en un elemento de lienzo, mientras se programa con JS compilado Kotlin

luis lyra

Estoy construyendo una 'fuga' basada en la web muy simple y me he encontrado con problemas al intentar hacer que la pelota se mueva sobre el elemento de lienzo. Tengo el juego en funcionamiento en javascript. La cosa es que ahora estoy intentando portarlo a Kotlin (compilado en javascript). Incluso después de hacer las adaptaciones que creo que eran necesarias, la pelota no se mueve.

También estoy teniendo problemas con los tipos (es por eso que verá esos "* 1.0" por ahí), ya que no he podido convertir de int a double, pero no diría que ese es el problema aquí. Además, el IDE muestra un comentario con el que no estoy familiarizado. Hablo de eso en la sección sobre mensajes de error, pero el mensaje es el siguiente: "Envuelto en un objeto de referencia para ser modificado cuando se captura en un cierre".

No estoy seguro de dónde radica exactamente el problema, pero hasta ahora he intentado: -Otras firmas para mi llamada 'setInterval' -Reformar el programa para que mi código esté dentro de main (), para deshacerme de la devolución y 'val canvas = initializeCanvas () 'llamada.

import org.w3c.dom.*
import kotlin.browser.*
import kotlin.math.*


val canvas = initializeCanvas()
fun initializeCanvas(): HTMLCanvasElement {
    val canvas = document.createElement("canvas") as HTMLCanvasElement
    val ctx = canvas.getContext("2d") as CanvasRenderingContext2D
    ctx.canvas.width = 480
    ctx.canvas.height = 320
    document.body!!.appendChild(canvas)
    var x = canvas.width/2
    var y = canvas.height-30
    val dx = 2
    val dy = -2
    fun drawBall(){
        ctx.beginPath()
        ctx.arc(x*1.0, y*1.0, 10.0, 0.0, PI*2)
        ctx.fillStyle = "#000000"
        ctx.fill()
        ctx.closePath()
    }
    fun draw(){
        ctx.clearRect(0.0, 0.0, canvas.width*1.0, canvas.height*1.0)
        drawBall()
        x += dx
        y += dy
    }
    window.setInterval(draw(),10)
    return canvas
}

El resultado esperado sería el de la bola moviéndose hacia la parte superior derecha del lienzo y luego desapareciendo en la pared, ya que aún no he implementado las colisiones.

La salida de corriente, como dije, es de una bola estática.

En cuanto a los mensajes de error, no hay ninguno. Pero una "Nota IDE" me ha estado molestando. en el código que proporcioné, dentro de la función de dibujo, incremento xey. Cuando coloco el cursor sobre ellos, intellij dice que están "Envueltos en un objeto de referencia para ser modificados cuando se capturan en un cierre". Nunca antes había visto tal advertencia y una búsqueda en la web no ha sido fructífera.

oscuro

Envuelto en un objeto de referencia para ser modificado cuando se captura en un cierre

Eso simplemente significa que debe envolver el método que desea ejecutar ( dibujar ) dentro de un cierre. Sin él, solo se invocará una vez.

Así que simplemente cambia

window.setInterval(draw(), 10)

a

window.setInterval( { draw() }, 10)

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo