我想做这个动画 - 海水中的水位上升吞没了一个有坑的小山。当水退去时,一些水会停留在口袋中,当水位上升时,水也会变成一个。这个动画无限期地继续。现在我尝试使用两种方法来做到这一点,
1)用海水中的水流吸取并清理池中的水。 ctx.bezierCurveTo(X1,Y1,X2,Y2,end_x,end_y); 我用水流改变了第一和第二控制点,使基部从小平面变为球形,反之亦然。但是不顺利,第二个坑也有不规则的基础,所以不可能。
2)我把所需的口袋装满水并且不透明,以便口袋水在浸没时与海水混合。同样,这种方法并不能让人看上去顺利。
这是它应该是什么样子:
基础图像是画布的背景,我只需控制水流量。
请建议做什么。
答案 0 :(得分:0)
您可以使用合成让您的海水无缝地侵入您的山峰
特别是“source-out”合成允许您仅在不与任何现有内容重叠的地方绘制新内容。
因此,“源出”合成将允许您在不与现有山峰重叠的地方绘制新的海水。
当水涨起时:
当水落下时:
答案 1 :(得分:0)
步骤1>>
1)在海中取水(目的地) 2)设置ctx.globalCompositeOperation =“destination-out”; 3)抽水池(来源)
这将删除与dest重叠的部分源。从而创造出具有空心空间(透明度)的海水代替水池。现在这个带孔的图像成为了目标。我必须只画水池水,以保持水的一致性。
步骤2>>
1)设置ctx.globalCompositeOperation =“destination-atop”; 2)抽水池(来源)
这将绘制dest。只有在哪里。和源重叠,即当dest。在空心区域创建带孔的图像(代替池的透明度)和池重叠海水。值得注意的是 - 泳池水就像海水的一部分,因此我不必担心池水(源)会像“目的地 - 顶层”一样被创建。