У меня есть базовый c код, который создает двумерный массив объекта, который содержит x и y. Когда я впервые создаю экземпляры объектов в массиве, они содержат точные данные. Но когда я попадаю внутрь requestAnimationFrame l oop, данные становятся поврежденными и перестают быть точными? И я не могу объяснить, почему это происходит
Вот мой индекс. html
<html>
<head>
<script src="index.js"></script>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
</html>
index. js
window.addEventListener('DOMContentLoaded', (event) => {
class Pos {
constructor(y, x) {
this.y = y;
this.x = x;
}
getx() {
return x;
}
gety() {
return y;
}
}
var canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
let surfacex = 10;
let surfacey = 10;
let surface = new Array(surfacey);
for (var y = 0; y < surfacey; ++y) {
surface[y] = new Array(surfacex);
}
for (var y = 0; y < surfacey; ++y) {
for (var x = 0; x < surfacex; ++x) {
surface[y][x] = new Pos(y, x);
}
}
for (var y = 0; y < surfacey; ++y) {
for (var x = 0; x < surfacex; ++x) {
console.log(surface[y][x].getx()+":"+surface[y][x].gety());//THis line prints correctly
}
}
function tick(time) {
ctx.clearRect(0, 0, surfacex, surfacey);
for (var y = 0; y < surfacey; ++y) {
for (var x = 0; x < surfacex; ++x) {
console.log(surface[y][x].getx()+":"+surface[y][x].gety());//Prints 10:10....no longer correct
}
}
requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
});
Я запускаю 2D l oop для создания экземпляров объектов, затем снова запустите l oop, чтобы распечатать их данные. Их данные печатаются правильно, но когда я последовательно запускаю l oop внутри requestAnimationFrame l oop, getx и gety продолжают возвращать 10:10 ..