博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《HTML5 2D游戏编程核心技术》——第3章,第3.9节使用视差产生视深的假象
阅读量:6258 次
发布时间:2019-06-22

本文共 1063 字,大约阅读时间需要 3 分钟。

本节书摘来自华章出版社《HTML5 2D游戏编程核心技术》一书中的第3章,第3.9节使用视差产生视深的假象,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.9 使用视差产生视深的假象

如果你曾在行驶中的汽车座椅上观察到自己的手相对于电线杆在高速运动,你就会知道,接近你的物体比远离你的物体移动得快。这种现象称为视差。
Snail Bait游戏是一个二维平台游戏,但它也应用了一些视差特效,使得游戏中的平台看起来比游戏背景更接近跑步小人。Snail Bait游戏是通过让平台比背景滚动的速率更快来实现这种视差的,如图3.10所示。顶部截图显示了在特定时间点的背景,底部截图显示了经过一些游戏帧后的背景。从这两个截图中你可以看到,在相同的时间内,平台移动的速度要比背景快得多。

图3.10 视差:平台(近的)滚动比背景(远的)滚动快

535cae4d992e9aea31e14c78e510a8f83b1292a0

为了实现视差,我们需要做的是要修订drawPlatforms()函数,如程序清单3.18所示。

程序清单3.18 修订后的drawPlatforms()函数

f36f01f88643001add018ba04ef966e9619eb2a8

原始版本的drawPlatforms()函数简单地遍历平台数据,对每一个数据实例调用drawPlatforms()函数,如程序清单3.3所示。修订后的drawPlatforms()函数将游戏canvas元素的坐标系向左平移platformOffset个像素点,遍历数据,然后再将坐标系平移回调用drawPlatforms()函数之前所处的位置。

修订后的drawPlatforms()函数在实现滚动平台时,同程序清单3.14中列出的函数drawBackground()滚动背景类似。Snail Bait游戏使用两个偏移量来分别滚动背景和平台:一个用于背景,另一个用于平台。
既然要使用平台偏移量来滚动平台,就必须计算该数值。程序清单3.19显示了Snail Bait游戏中setPlatformOffset()函数的实现,该函数计算平台偏移量的方法同程序清单3.15中setBackgroundOffset()函数计算背景偏移量的方法类似。
程序清单3.19 设置平台速度和偏移量

584a14bd42ee666b86cce5c9868f67b65f0cf16b

视差效果的最后一个问题是如何更新draw()函数,来完成滚动平台。修订版本的draw()函数如程序清单3.20所示。

程序清单3.20 修改过的draw()函数

4dcb83f26109e1715f7d11b40b698e3a47beca58

对于每一个动画帧来说,draw()函数通过setPlatformVelocity()函数设置平台的移动速率,接着设置偏移量,然后绘制背景、跑步小人以及平台。

转载地址:http://ydesa.baihongyu.com/

你可能感兴趣的文章
开源堡垒机 Jumpserver v1.4.8 发布 , Bug 修复版本
查看>>
(十五)Java并发性和多线程-死锁
查看>>
第1章 JVM语言家族概览 《Kotin 编程思想·实战》
查看>>
spring之HttpInvoker
查看>>
我为什么“放弃”从事八年的嵌入式领域
查看>>
TypeScript基础入门 - 函数 - 重载
查看>>
【ASP】当前星期几和月份名称输出
查看>>
好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-23期...
查看>>
小二,给我来一个递增序列
查看>>
images
查看>>
又一款开源手机要来了 —— WiPhone
查看>>
爬虫入门之反反爬虫机制cookie UA与中间件(十三)
查看>>
【飞天存储服务月报】2018年6月刊
查看>>
AJAX的一些硬知识
查看>>
第208天:jQuery框架封装(一)
查看>>
JNDIUtil、DBCPUtil、C3P0Util,三种数据源的工具类的区别?
查看>>
暴风魔镜裁员了,但是VR的春天依然在路上
查看>>
Java并发编程笔记之CyclicBarrier源码分析
查看>>
Weex在苏宁移动办公开发中是如何实践的?
查看>>
阿里倡导成立“罗汉堂”, 6名诺贝尔奖得主加入
查看>>