Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要使用设置和绘制功能?_Javascript_Three.js_Installation_Draw_Convention - Fatal编程技术网

Javascript 为什么要使用设置和绘制功能?

Javascript 为什么要使用设置和绘制功能?,javascript,three.js,installation,draw,convention,Javascript,Three.js,Installation,Draw,Convention,我希望这不是一个太抽象的问题,但我一直在努力解决这个问题 使用多种语言编写生成/交互动画时,通常会看到以下结构: global variables a setup function a draw function ( the loop ) 例如,此画布草图使用javascript var ctx, w, h, x = y = 1, xd = yd = 1; function setup() { var canvas = document.getElementByI

我希望这不是一个太抽象的问题,但我一直在努力解决这个问题

使用多种语言编写生成/交互动画时,通常会看到以下结构:

global variables
a setup function 
a draw function ( the loop ) 
例如,此画布草图使用javascript

var ctx, w, h,
    x = y = 1,
    xd = yd = 1;

function setup() {
    var canvas = document.getElementById("canvas");
    canvas.width = w = window.innerWidth;
    canvas.height = h = window.innerHeight;
    ctx = canvas.getContext("2d");
}

function draw() {
    ctx.clearRect(0, 0, w, h);

    ctx.fillRect(x, y, 10, 10);

    if(x>w || x<0){ xd = -xd }
    if(y>h || y<0){ yd = -yd }

    x += xd;
    y += yd;
}

setup();
setInterval(draw, 1000/60);
以上是一把小提琴:

有时我甚至看到第三个函数添加到这个等式中,类似于设置、渲染、动画这样的东西:在threejs示例中非常常见

但在我看来,您真正需要的是绘制循环函数,如下所示:

var ctx, w, h,
    x = y = 1,
    xd = yd = 1;

var canvas = document.getElementById("canvas");
    canvas.width = w = window.innerWidth;
    canvas.height = h = window.innerHeight;

ctx = canvas.getContext("2d");


function draw() {
    ctx.clearRect(0, 0, w, h);

    ctx.fillRect(x, y, 10, 10);

    if (x > w || x < 0) { xd = -xd }
    if (y > h || y < 0) { yd = -yd }

    x += xd;
    y += yd;
}

setInterval(draw, 1000 / 60);
在这里为上面的内容演奏小提琴:


我意识到我的第一个例子似乎是跨语言的约定,必须有一些实用的/功能性的解释,只是不确定为什么???

这都与代码的可重用性有关。例如,如果要更改画布的高度或宽度,则必须在更改大小后重新键入所有这些代码行,或者可以再次运行安装程序。这与图形细节在函数中的原因相同,因为它们被反复调用。这是一种代码组织形式。使用函数名setup清楚地表明了这些行的意图。