我的解决方案是使用FFMPEG拆分.flv,然后将这些帧拼接成大型图像,就像精灵表一样。 问题是当我切换到新的帧表时动画会“卡顿”。我只是通过视觉和控制台(通过记录何时更改当前精灵表行来确定)进行了检查。我测试了更改精灵表时它如何卡顿,以及仅循环同一表时它不会卡顿。
我预先加载了所有图像:
var frameImages = [];
for(var i = 0; i < 35; i++)
{
frameImages.push(new Image());
frameImages[i].src = 'frame' + i + '.png';
console.log(frameImages[i].src);
frameImages[i].onload = function()
{
// Notify us that it's been loaded.
console.log("Image loaded");
}
}
然后像这样播放:
processFrame = function()
{
outputCanvas.width = outputCanvas.width;
output.drawImage(frameImages[currentFrame], (curCol*153), (curRow*448), 153, 448, 0, 0, 153, 448);
curCol += 1;
if(curCol >= maxCol)
{
curCol = 0;
curRow += 1;
if(curRow >= maxRow)
{
curRow = 0;
currentFrame++;
}
}
}
}
var mozstart = window.mozAnimationStartTime;
step = function(timestamp) {
var diff = (new Date().getTime() - start) - time;
if(diff >= frameDelay)
{
processFrame();
time += frameDelay;
}
}
我在使用Chrome v 23.0.1271.97 m浏览器和Nexus 7上的Chrome尝试过此操作。
您可以在这里查看效果:
http://savedbythecode.com/spokes/mozanimation.php - 这是使用mozAnimationStartTime
以及http://savedbythecode.com/spokes/newplayer.php - 这是使用从http://www.sitepoint.com/creating-accurate-timers-in-javascript/调整每一步的常规JS计时器。
有什么想法吗?问题清晰吗?
谢谢, Kevin