Привет, я изучал webgl в эти дни и пытался сделать из него какую-то игру.
То, что я сделал до сих пор, на самом деле не имеет большого смысла, но оно имеет часть игровой логики.
По сути, я хочу переместить квадрат, и в течение определенного количества шагов перемещение квадрата приведет к тому, что текущая позиция станет новым квадратом, поэтому предыдущий квадрат станет больше или длиннее. И когда мы достигнем определенной точки, движущийся квадрат сотрет последний квадрат и как бы оторвется от предыдущего квадрата.
Вот демо: https://codepen.io/zhenghaohe/pen/xMVeWq
Сначала я выделяю достаточно места в буфере.
gl.bufferData(gl.ARRAY_BUFFER, 200*4*8, gl.STATIC_DRAW);
Изображение У меня есть квадратная сетка 20x10 размером 400 пикселей x 200 пикселей, и она может содержать не более 200 квадратов, для каждого квадрата я использую 4 вершины (треугольники-полосы) для рисования, каждая вершина составляет 8 байтов (2 числа с плавающей точкой),
затем я перемещаю центр ведущего квадрата и использую bufferSubDate для отправки новых вершин в буфер
function setNewBuffer(dir) {
const newCenter = getNewCenter(dir,previousCenter);
const newVertices = getNewVertices(newCenter);
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
if(index === BREAK_POINT) {
index--;
}
gl.bufferSubData(gl.ARRAY_BUFFER, 32*index, new Float32Array(newVertices));
index++;
previousCenter = newCenter;
}
Прямо сейчас проблема заключается в том, что после достижения точки останова, только когда мой квадрат движется горизонтально, он может правильно отсоединиться и двигаться сам по себе, однако, когда я перемещаю его вертикально, он внезапно каким-то образом соединится с этими предыдущими квадратами. Я не понимаю, почему.
Может ли кто-нибудь помочь мне с этой проблемой? Если у кого-то из вас есть какие-либо предложения по коду, не стесняйтесь сообщить мне.
Спасибо