【发布时间】:2013-02-08 08:45:44
【问题描述】:
我正在尝试实现类似于您在卡通杂烩 (example link) 上看到的效果,其中形状用作掩蔽层,用于保持静态的下方纹理。我已经开始尝试这个想法,通过创建一个渲染循环来清除画布,保存它的状态,然后绘制一个矩形剪辑区域,然后绘制占据整个画布宽度和高度的背景纹理。
这里是绘制函数:
function draw()
{
context.clearRect(0,0, 640, 480);
context.save();
x += velocityX;
y += velocityY;
context.rect(x, y, 40, 40);
context.clip();
context.drawImage(image, 0,0, 640, 480);
context.restore();
}
基本上它以每秒 60 帧的速度运行,更新矩形的位置并在剪切区域内剪切背景图像。 (我知道代码的结构并不完美,但我只是在尝试看看这种效果是否可以在画布上实现)。
我似乎遇到的问题是循环的前一次迭代中的剪辑区域悬而未决,从而产生了您在上面的小提琴中看到的奇怪效果。我已经尝试在循环的draw() 步骤中重新排序所有内容,但似乎唯一有效的是用于清除屏幕的canvas.width = canvas.width 技巧。我想避免这种清除屏幕的方法,因为它似乎在 IE 中不起作用,而且它还会破坏画布state。 clearRect() 应该可以清除屏幕。我做错了什么?
【问题讨论】:
-
抱歉,已将链接更新为youtu.be/EDcICGLpybQ?t=29s,这对我来说很好
-
也不可用,但没有说明原因。只是不可用。
-
奇怪,对我来说很好用。 youtube 地区是否限制某些视频?
-
youtu.be/iX850GfvS9o 试试这个?
标签: javascript html animation canvas clipping