javascript - Fabric.js - 如何从 Sprite 表制作动画

标签 javascript animation html5-canvas fabricjs sprite-sheet

JavaScript 语法:

context.drawImage(img,srcX,srcY,srcWidth,srcHeight,x,y,width,height);

在 Javascript 中,如果我想要为下面的 spritesheet 制作动画,我只需更新每个动画帧的 srcXsrcY 即可捕获图像的片段。

enter image description here

这会导致每个帧被剪切并单独显示在 Canvas 上,当以固定帧速率更新时,会产生流畅的 Sprite 动画,如下所示:

enter image description here

如何使用“Fabric.js”库执行此操作?

注意:实现此目的的一种方法是设置 canvasSize = frameSize,以便在任何给定时间只能看到一帧。然后通过移动图像,可以将不同的帧放置在 Canvas 内以模拟动画。然而,这不适用于大 Canvas 或可变的帧尺寸。

最佳答案

看看这个,它做了同样的事情。

行走的人形。 Fabric.js,图像动画。

        var URL = '/image/M06El.jpg';
        var canvas = new fabric.Canvas('canvas');
        var positions = {
            topSteps:2,
            leftSteps:4
        };
        canWalk(URL,positions);
        function canWalk(URL,positions){
            var myImage = new Image();
            myImage.src = URL;
    
            myImage.onload = function() {
                var topStep = myImage.naturalHeight/positions.topSteps;
                var leftStep = myImage.naturalWidth/positions.leftSteps;
    
                var docCanvas = document.getElementById('canvas');
                docCanvas.height = topStep;
                docCanvas.width = leftStep;
                fabricImageFromURL(0,0);
                var y = 0;
                var x = 0;
                setInterval(function(){
                    if(x == positions.leftSteps)
                    {
                        x = 0;
                        y++;
                        if(y==positions.topSteps)
                        {
                            y=0;
                        }
                    }
                    fabricImageFromURL(-y*topStep,-x*leftStep);
                    x++;
                },100);
            };
        }
    
	function fabricImageFromURL(top, left)
	{
		console.log(top, left);
		fabric.Image.fromURL(URL, function (oImg) {
			oImg.set('left', left).set('top',top);
			oImg.hasControls = false;
			oImg.hasBorders  = false;
			oImg.selectable  = false;
			canvas.add(oImg);
			canvas.renderAll();
		}, {"left": 0, "top": 0, "scaleX": 1, "scaleY": 1});
	}
<canvas id="canvas"></canvas>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.min.js"></script>

关于javascript - Fabric.js - 如何从 Sprite 表制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241837/

相关文章:

javascript - 如何在 Google map 中的方向变化之间实现平滑过渡?

javascript - 在特定时间段内使用 JavaScript 更改 HTML 元素的背景颜色?

animation - 将指针向上/向下效果应用于 Windows Phone 8.1 应用程序

javascript - 如何在php中使用一张图像绘制形状

javascript - 一段时间后重复执行函数的好模式是什么?

javascript - Monaca.getDeviceId() 无法设置为变量

javascript - 使用 Slick Scroller Carousel 隐藏自定义按钮

javascript - 确定变量中元素的数量

javascript - 将 Canvas 分成相同宽度和高度的空间

javascript - 使用 javascript 将 html 文本渲染为位图,无需服务器端代码