使用时输出呈现不同(for loop vs setInterval,requestAnimationFrame)
Output is Rendered differently when using( forloop vs setInterval,requestAnimationFrame)
我遇到了 ForLoop 与 (setInterval,requestAnimationFrame) 的问题
下面的代码简单地在 canvas.
上绘制随机矩形
我避免通过 Copy/pasting 此处的整个代码使这个问题变大,而是我将 post 相关代码与演示
问题是当我使用
1 时。对于绘制 50 个矩形的循环,我在屏幕上得到了所有 50 个矩形,如下所示,但是我使用 setInterval 或 requestAnimation(callback) 而不是 forloop
2.if 我得到了单个矩形。
在第二种情况每当绘制一个新的矩形时,以前绘制的矩形都是清晰的,所以最终 o/p 我得到的是单个矩形,但是如果我使用 forloop,这不会发生为什么会这样?
我用
测试了我的案例
ForLoop,setInterval and requestAnimationFrame
使用 For 循环:
我的代码流程是这样的 Demo:
function main() {
.....
drawRects();
}
function drawRects() {
for(var i=0;i<50;i++){
setRectangle(gl, randomInt(100), randomInt(100),randomInt(100), randomInt(100));
//draw Rectangle
....
}}
main();
我得到输出为:
使用 requestAnimationFrame/ 与 setInterval 相似:
我的代码流程是这样的 Demo:
function main() {
.....
render();
}
function render(){
if(rectCount < 50){
drawRects();
rectCount++;
}
window.requestAnimationFrame(render);
}
function drawRects() {
setRectangle(gl, randomInt(100), randomInt(100),randomInt(100), randomInt(100));
//draw Rectangle
....
}
main();
这是因为 WebGL 在合成后清除了 canvas
如果您不希望 WebGL 在合成后清除 canvas,您可以在创建上下文时传入 preserveDrawingBuffer: true
var gl = someCanvas.getContext("webgl", { preserveDrawingBuffer: true });
可能会牺牲一些性能。
其他一些更详细的问答
我遇到了 ForLoop 与 (setInterval,requestAnimationFrame) 的问题
下面的代码简单地在 canvas.
上绘制随机矩形
我避免通过 Copy/pasting 此处的整个代码使这个问题变大,而是我将 post 相关代码与演示
问题是当我使用
1 时。对于绘制 50 个矩形的循环,我在屏幕上得到了所有 50 个矩形,如下所示,但是我使用 setInterval 或 requestAnimation(callback) 而不是 forloop
2.if 我得到了单个矩形。
在第二种情况每当绘制一个新的矩形时,以前绘制的矩形都是清晰的,所以最终 o/p 我得到的是单个矩形,但是如果我使用 forloop,这不会发生为什么会这样?
我用
ForLoop,setInterval and requestAnimationFrame
使用 For 循环: 我的代码流程是这样的 Demo:
function main() {
.....
drawRects();
}
function drawRects() {
for(var i=0;i<50;i++){
setRectangle(gl, randomInt(100), randomInt(100),randomInt(100), randomInt(100));
//draw Rectangle
....
}}
main();
我得到输出为:
使用 requestAnimationFrame/ 与 setInterval 相似:
我的代码流程是这样的 Demo:
function main() {
.....
render();
}
function render(){
if(rectCount < 50){
drawRects();
rectCount++;
}
window.requestAnimationFrame(render);
}
function drawRects() {
setRectangle(gl, randomInt(100), randomInt(100),randomInt(100), randomInt(100));
//draw Rectangle
....
}
main();
这是因为 WebGL 在合成后清除了 canvas
如果您不希望 WebGL 在合成后清除 canvas,您可以在创建上下文时传入 preserveDrawingBuffer: true
var gl = someCanvas.getContext("webgl", { preserveDrawingBuffer: true });
可能会牺牲一些性能。
其他一些更详细的问答