画布动画的行为很奇怪,就像一个步长函数
canvas animation weirdly behaves like a step function
我的意思是,帧块将以极快的速度执行,然后在块之间暂停很长时间(4-6k毫秒)
它被明确地定义为每隔42ms一个间隔。相反,在第一次调用之后,会有一个暂停,然后5-6次迭代会突然出现(您可以通过日志记录看到)。当它进行迭代时,它会正确地遍历子画面表,迭代不是每42ms1次发生一次。
只是在铬上测试,因为我稍后会把它插入Electron。但首先我必须弄清楚这一点。
这是js,只有html<canvas id="person1"></canvas>
var people = [];
var p1_canvas = document.getElementById("person1");
p1_canvas.width = 321;
p1_canvas.height = 571;
var p1_img = new Image();
p1_img.src = "person1.png";
var person1 = {x:0,y:0,f:1,max_x:3852-321,max_y:55958-571,canvas:p1_canvas,img:p1_img,width:321,height:571,name:"person1",playing:false};
people[person1.name] = person1;
function talk(person){
if(!person.playing){return;}
if(person.x == person.max_x){ //next row or at end 3852/12=321
if(person.y == person.max_y){ //at end 55958/98=571
person.x=0; person.y=0; person.f=0;
} else { //next row
person.x=0; person.y+=571;
}
} else { //same row, move 321 to the right
person.x+=321;
}
console.log("frame: "+person.f+" coords:"+person.x+","+person.y); person.f++;
//clear old frame and move to x,y
var context = person.canvas.getContext("2d");
context.clearRect(0,0,person.width,person.height);
context.drawImage(person.img,person.x,person.y,person.width,person.height,0,0,person.width,person.height);
}
function play(person){ person.playing = true; person.interval = window.setInterval(function(){talk(person1);},42); }
function stop(person){ person.playing = false; window.clearInterval(person.interval); }
只是一个想法(我还不能评论):我在SO中发现,使用与DOM元素id同名的变量(person1)可能会很混乱。因为一个对象person1是用这个id创建的。
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟