Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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_Canvas - Fatal编程技术网

Javascript 画布推送对象失败

Javascript 画布推送对象失败,javascript,canvas,Javascript,Canvas,每次当我回顾并试图重新编写代码时,我总是会遇到错误和一些意想不到的问题。我正在制作一个名为draw()的函数对象,并尝试将其推入一个空数组中20次,以便制作动画。代码如下: function draw(){ var r = 20; var x = Math.random()*canvas.width - r; var y = Math.random()*canvas.height - r; ctx.b

每次当我回顾并试图重新编写代码时,我总是会遇到错误和一些意想不到的问题。我正在制作一个名为
draw()
的函数对象,并尝试将其推入一个空数组中20次,以便制作动画。代码如下:

function draw(){
            var r = 20;
            var x = Math.random()*canvas.width - r;
            var y = Math.random()*canvas.height - r;
            ctx.beginPath();
            ctx.arc(x,y,r,Math.PI*2,false);
            ctx.fillStyle='yellow';
            ctx.fill();
        }


        myArray = [];

    for(i=0;i<20;i++){
        myArray.push(draw());
    }

    function animate(){
        ctx.clearRect(0,0,canvas.width,canvas.height);
        requestAnimationFrame(animate);
        for(i=0;i<myArray.length;i++){
            myArray[i];
        }
    }

    animate();
函数绘图(){
var r=20;
var x=Math.random()*canvas.width-r;
var y=Math.random()*canvas.height-r;
ctx.beginPath();
弧(x,y,r,数学π*2,假);
ctx.fillStyle='yellow';
ctx.fill();
}
myArray=[];
for(i=0;i
myArray.push(draw())
立即调用
draw()
函数,并将其返回值(
未定义的
)放入数组。您可能希望推送对该函数的引用,因此省略
()

然后,在for循环中,要从数组中调用函数,需要使用括号:

myArray[i]();
推送相同的函数似乎有点毫无意义,因为您可以直接从循环中调用函数,而不使用数组,但我假设您希望设置运行一些未显示的不同函数的预定义序列的可能性

无论如何,下面的演示显示了在完整代码的上下文中进行的上述更改:

var canvas=document.querySelector(“canvas”)
var ctx=canvas.getContext(“2d”);
函数绘图(){
var r=20;
var x=Math.random()*canvas.width-r;
var y=Math.random()*canvas.height-r;
ctx.beginPath();
ctx.arc(x,y,r,Math.PI*2,false);
ctx.fillStyle='黄色';
ctx.fill();
}
myArray=[];
对于(i=0;i<20;i++){
myArray.push(draw);//此行已更改
}
函数animate(){
clearRect(0,0,canvas.width,canvas.height);
请求动画帧(动画);
对于(i=0;i

Thanks@nnnnnn现在我明白了,带引用的传递不应该包括()因为我的函数对象中没有返回值。我只是想回顾一下我学到的东西,并继续编写一些随机的东西,以获得画布材料的真实感受:D谢谢你的回答!即使你的函数确实返回了一个值,你仍然想使用对该函数的引用,你还不想调用它。所以不要使用
()
在该点。仅在要调用它的点使用
()
。(如果函数的返回值本身是对某个函数的引用,则例外。)
myArray[i]();