为什么是重新绘制而不是叠加?

来源:2-9 实战:实现一个贪吃蛇小游戏

qq_低调演绎_0

2023-07-12

图片描述
请问在绘制的时候调了2次drawArrays画了两个点,而在定时器100ms后再次调用drawArrays为什么是清空后画了两个点而不是叠加成4个点?

写回答

3回答

yancy

2023-07-13

这里利用的是 webgl 的缓冲清除,下一次绘制的时候会将之前的缓冲区内容进行清除,然后再进行绘制。如果不想清除缓冲区,可以这样设置 getContext('webgl', { preserveDrawingBuffer: true }) ,然后再运行,看到的就是不会清除的版本,会保留之前所有绘制过的点

0
4
yancy
回复
泡沫313
用计时器会存在时间误差,可以用requestAnimationFrame来检验一下
2023-09-06
共4条回复

嘤嘤怪势力登场

2023-07-26

我查到的是:gl.drawArrays() 方法只会同步绘图,走完了js 主线程后,再次绘图时,就会从头再来。也就说,异步执行的drawArrays() 方法会把画布上的图像都刷掉。


4
0

LiGNaiXO

2023-09-05

gl.drawArrays(gl.POINT,0,1)方法和canvas 2d中的ctx.draw()方法不同。

ctx.draw真的像画画一样,一层一层的覆盖图像。

gl.drawArrays方法只会同步绘图,走完了JS主线程后,再次绘图时,就会从头再来。就是说,异步执行的gl.drawArrays方法会把画布上的图像都刷掉。


1
0

WebGL+Three.js 入门与实战,系统学习 Web3D 技术

前端的技术蓝海,涨薪好选择

1081 学习 · 294 问题

查看课程