Я создаю очень простой веб-прорыв, и у меня возникли проблемы при попытке заставить шар двигаться на элементе canvas.У меня есть игра и работает в javascript.Дело в том, что я сейчас пытаюсь перенести его на Kotlin (скомпилированный javascript).Даже после выполнения адаптаций, которые я считаю необходимыми, мяч не будет двигаться.
У меня также возникают проблемы с типами (поэтому вы увидите, что эти "* 1.0" лежат без дела), так как я не смог преобразовать из int в double, но я бы не сказал, что этовыпуск здесь.Кроме того, IDE показывает замечание, с которым я не знаком.Я говорю об этом в разделе о сообщениях об ошибках, но сообщение выглядит следующим образом: «Обернутый в эталонный объект, который будет изменен при захвате в замыкании».
Я не уверен, в чем именно заключается проблема,но до сих пор я пробовал: -Другие подписи для моего вызова setInterval -Переформатирование программы, чтобы мой код находился в main (), чтобы избавиться от возврата и вызова val canvas = initializeCanvas ().
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
}
Ожидаемым результатом будет то, что шар сместится к верхнему правому краю холста, а затем исчезнет в стене, поскольку я еще не реализовал столкновения.
Текущий выводКак я уже говорил, имеет статический шар.
Что касается сообщений об ошибках, то их нет.Но "Примечание IDE" беспокоило меня.в предоставленном мною коде внутри функции draw я увеличиваю x и y.Когда я наводю на них курсор, intellij говорит, что они «обернуты в эталонный объект, который будет изменен при захвате в замыкании».Я никогда не видел такого предупреждения раньше, и поиск в Интернете не был плодотворным.