【第5章 动画】5.8 视差动画

文章目录


从不同的位置,以不同的视线来观察同一个物体时,就会产生视差。这也是远处物体看上去好像比近处物体移动速度更慢的原因。

在这里插入图片描述

上面的动画中,从远到近,有天空、小树、大树、草地,物体的移动速度依次变快。动画制作者让各个动画图层以不同的速度滚动,这样就实现了视差效果。

小结:了解视差动画是什么,下面的代码示例不用深究,实际项目中遇到再去考虑

let skyOffset = 0,
	grassOffset = 0,
	treeOffset = 0,
	nearTreeOffset = 0,
	TREE_VELOCITY = 20,
	FAST_TREE_VELOCITY = 40,
	SKY_VELOCITY = 8,
	GRASS_VELOCITY = 75

function draw() {
	context.save()

	skyOffset = skyOffset < canvas.width ? skyOffset + SKY_VELOCITY / fps : 0

	grassOffset = grassOffset < canvas.width ? grassOffset + GRASS_VELOCITY / fps : 0

	treeOffset = treeOffset < canvas.width ? treeOffset + TREE_VELOCITY / fps : 0

	nearTreeOffset = nearTreeOffset < canvas.width ? nearTreeOffset + FAST_TREE_VELOCITY / fps : 0

	context.save()
	context.translate(-skyOffset, 0)
	context.drawImage(sky, 0, 0)
	context.drawImage(sky, sky.width - 2, 0)
	context.restore()

	context.save()
	context.translate(-treeOffset, 0)
	context.drawImage(tree, 100, 240)
	context.drawImage(tree, 1100, 240)
	context.drawImage(tree, 400, 240)
	context.drawImage(tree, 1400, 240)
	context.drawImage(tree, 700, 240)
	context.drawImage(tree, 1700, 240)
	context.restore()

	context.save()
	context.translate(-nearTreeOffset, 0)
	context.drawImage(nearTree, 250, 220)
	context.drawImage(nearTree, 1250, 220)
	context.drawImage(nearTree, 800, 220)
	context.drawImage(nearTree, 1800, 220)
	context.restore()

	context.save()
	context.translate(-grassOffset, 0)

	context.drawImage(grass, 0, canvas.height - grass.height)
	context.drawImage(grass, grass.width - 5, canvas.height - grass.height)
	context.drawImage(grass2, 0, canvas.height - grass2.height)
	context.drawImage(grass2, grass2.width, canvas.height - grass2.height)
	context.restore()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值