《HTML5+JavaScript动画基础》——1.2 帧与运动

简介: 自然,这是有代价的。随着系统变得越来越大,规则变得越来越复杂,电脑必须能够迅速地计算出下一份图像描述,并将其显示出来。如果你想保持一定的帧率,那么给予电脑的处理时间(毫秒级)就极其有限。如果电脑无法及时完成计算,帧率就会下降

本节书摘来自异步社区《HTML5+JavaScript动画基础》一书中的第1章,第1.2节,作者:【美】Billy Lamberta , Keith Peters著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 帧与运动

动画是一个创造运动假象的过程。几乎所有的投影运动媒体都采用帧实现运动。

帧是将一系列离散的图像以极快的速度连续播放从而模拟物体运动或变化。帧是你能在电脑、电视或电影屏幕上看到任何东西的基础。这个想法要回溯最早期的卡通,当时动画家把很多独立的图片绘制到一张张赛璐珞片(又称明片)上,而早期的运动影片同样是针对多张照片采用了类似的技术。

利用帧实现动画的概念很简单:当我们连续播放一系列有略微差别的图像时,大脑会将它们想象成一幅不断运动的图像。但是为什么我们坚持将其称为一种运动的假象?如果你在电影屏幕上看到一个人走过一间房间,这不算是运动吗?当然不算,因为这只不过一个人的图像而不是真人,但是这并不是我们不将其视为运动的原因。

注意,运动的物体通过穿越两点间的空间实现从一个点移动到另一个点。穿越空间的过程是流畅的,而不是跳跃的,这才是真实的运动。而基于帧的运动恰恰是跳跃式的。它的移动不是从一点到另一个点,而是在每一帧中从一个位置消失并出现在另一个位置。移动得越快,跳跃的感觉就越明显。

如果你看到一张图片里有一个人在房间的左边,而几秒钟后同一个人又出现在房间的右边,那么你会认为这是两张图片而绝不会把它们当做动画。即便你看到6张图片连在一起表现出一个人穿过房间的过程,你也只会把它们当做一系列独立的照片(见图1-1)。如果有足够多的照片以足够快的速度播放,虽然还是改变不了它们只是一系列静态照片的事实,但是你的看法却会发生变化。你的脑子会把它们当做一个人穿过了房间。与最开始的两张照片相比,它并没有什么本质不同,它始终不是真实的运动,不过,在到达某个频率之后,我们的大脑被欺骗了,认可了这一运动的假象。
screenshot

电影产业对这个频率做了大量的实验。研究表明将频率保持在每秒24帧,人们就会把这些帧视为一张运动的图像。如果低于此频率,人们就会察觉到跳帧,也就打破了这种运动的假象。并且人类的眼睛似乎无法区分比这更高的频率,每秒播放100帧并不会让你的动画显得更真实,尽管更高的帧率在电脑动画中会带来更好的互动感和流畅度。

1.2.1 记录帧
帧的完整概念使得以下3件事得以实现:储存、传播以及播放。你无法储存、传播以及播放一个真实的人走过一个房间,但是你可以保存那个人走过房间的很多照片,你可以传播这些图像并播放它们。这样,只要你能够解读这些保存的图像并有办法播放它们,你就可以在任何地方以及任意时间展现这一动画。

现在,我们需要给帧一个更加通用的定义。目前为止,我们一直将帧视为一张静止的照片或图画。让我们将之称为对一个系统在某一特定时间点的记录。这个系统可以是一个人穿越房间,时间可以是当他走到房间中间的时候,而此时的记录就是他走到房间中间的那张照片。另一方面,系统也可以是一个虚拟对象集合,此时的记录就是它们在某一特定时刻的形状、颜色以及位置。这样,你的动画就不再是一系列静止的图像,而是一系列关于图像的描述信息。电脑会根据这些描述信息创建并显示图像,而不是直接播放这些图像。将这一思想进一步演化就衍生出了程序帧。

1.2.2 程序帧
由于你有一台可以任由你使用并能够根据需要完成计算的电脑,因此你并不需要通过一个很长的帧描述列表实现动画。你可以将之简化为起始帧的一个描述,而后遵循某些特定的规则构建后续帧。此时,电脑所要做的就不仅仅是根据图像描述创建出一幅图像,而是要先创建图像描述,再根据描述创建图像并最终显示图像。

考虑一下采用这一方式你可以节省多少硬盘空间。图像需要占用硬盘的磁盘空间以及带宽,每秒24幅图像会迅速占用大量的空间。如果你将其简化为一份描述与一系列规则,那么文件大小则会急剧缩减。即便一系列用于表现物体运动与交互的复杂规则所占的空间也不会超过一幅中等大小的图像。事实上,人们对程序动画的第一印象就是文件是多么小。

自然,这是有代价的。随着系统变得越来越大,规则变得越来越复杂,电脑必须能够迅速地计算出下一份图像描述,并将其显示出来。如果你想保持一定的帧率,那么给予电脑的处理时间(毫秒级)就极其有限。如果电脑无法及时完成计算,帧率就会下降。而另一方面,基于图像播放的动画就无须关心场景中的内容以及它有多复杂,它只需要不断显示下一幅图像,而这通常是准时的。

相关文章
|
15天前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
33 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
1月前
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
129 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
1月前
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
54 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
1月前
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
89 33
|
2月前
|
人工智能 前端开发 JavaScript
前端基础之HTML
Web1.0、Web2.0 和 Web3.0 标志着互联网发展的三个阶段。Web1.0(静态互联网,1990年代初至2000年代初)以静态内容和单向信息流为主,用户仅能浏览。Web2.0(互动互联网,2000年代初至2010年代初)引入了用户生成内容和社交网络,内容动态且互动性强。Web3.0(语义互联网,2010年代至今)强调语义化、个性化、智能化及去中心化,结合AI、区块链等技术,提供沉浸式体验。HTTP和HTML作为互联网基础协议和技术,在各阶段不断演进,共同推动了现代互联网的发展。
前端基础之HTML
|
3月前
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
|
2月前
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
|
2月前
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
103 2
|
3月前
|
JavaScript 前端开发
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
|
3月前
|
JavaScript 前端开发
CSS3 动画和 JavaScript 动画的性能比较
具体的性能表现还会受到许多因素的影响,如动画的复杂程度、浏览器的性能、设备的硬件条件等。在实际应用中,需要根据具体情况选择合适的动画技术。

热门文章

最新文章