您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net:HTML5游戏开发进阶指南,快速开发

新葡亰496net:HTML5游戏开发进阶指南,快速开发

发布时间:2019-06-20 12:41编辑:奥门新萄京娱乐场浏览(139)

    准备

      IDE:VisualStudio 2017

      Language:VB.NET/C#

      图形API:Win2D

      MSDN教程:UWP游戏开发

      游戏开发涉及哪些技术?

    • 游戏开发是一门复杂的艺术,编码方面你需要考虑图形、输入和网络
    • 以及相对独立的音频、物理仿真和AI引擎等,每一个部分单独开发都一场是旷日持久的“战斗”
    • 美术、音乐和剧本也是组成游戏的重要部分,当然引擎不必包含这些素材

      不要试图一个人去完成所有的事情

    • 设计和实现完整的游戏引擎并不是一件轻松的事情
    • 制定几个特定的目标,然后将有限的时间花在这些“简单的”但靠谱的目标上
    • 得益于开源社区,你可以很便捷的找到各类完善的开源引擎,懂得借鉴它们并完善自己。

    准备

      IDE:VisualStudio 2017

      Language:VB.NET/C#

      图形API:Win2D

      MSDN教程:UWP游戏开发

      游戏开发涉及哪些技术?

    • 游戏开发是一门复杂的艺术,编码方面你需要考虑图形、输入和网络
    • 以及相对独立的音频、物理仿真和AI引擎等,每一个部分单独开发都一场是旷日持久的“战斗”
    • 美术、音乐和剧本也是组成游戏的重要部分,当然引擎不必包含这些素材

      不要试图一个人去完成所有的事情

    • 设计和实现完整的游戏引擎并不是一件轻松的事情
    • 制定几个特定的目标,然后将有限的时间花在这些“简单的”但靠谱的目标上
    • 得益于开源社区,你可以很便捷的找到各类完善的开源引擎,懂得借鉴它们并完善自己。

    UWP简单示例(三):快速开发2D游戏引擎,uwp2d

    新葡亰496net 1   书名:HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)   作者:【印】香卡(Shankar,A.R.) 著     谢光磊 译 出版社:电子工业出版社 出版时间:2013年9月出版 定价:79.00元 ISBN:978-7-121-21226-0 412页*16开

    HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!

    第一节 场景

           你轻轻闭上眼睛,脑海中回想起过往的某个画面,美好的画面喻示着你此刻的心情还不错。我们称组成这个画面的所有元素就是一个场景(Scene)。

      (上述定义从某个角度告诉我们,场景是一系列游戏元素的集合)

      场景包含哪些元素?

    • 摄像机 Camera
    • 图层 Layer
    • 物体 Body
    • 外部资源 Resource

      场景摄像机

    • 摄像机是场景中一类特殊对象,几乎具有可视化对象的全部属性与行为,但它是不可见的
    • 摄像机与场景绘制紧密相关,平面变换、效果和动画都将作用于摄像机裁剪时或裁剪后的画面
    • 场景中允许多个摄像机存在,但同一时间最多一个会被激活
    • 通过摄像机实现场景虚拟化,由可视化元素是否在摄像机视口内决定它是否要被绘制

      资源加载与预绘制 

    • 场景绘制与更新前需要先加载外部资源和预绘制
    • 外部资源包括贴图、音频、文本和用户自定义数据
    • 预绘制完成内存占用较多的缓存对象的绘制
    • 若加载花费一段时间,需要向用户提供加载动画
    • 不同场景之间资源不共享,这意味着切换场景必须重新加载资源

    新葡亰496net 2

    图1-1 可视对象接口继承层次(仅供参考)

    第一节 场景

           你轻轻闭上眼睛,脑海中回想起过往的某个画面,美好的画面喻示着你此刻的心情还不错。我们称组成这个画面的所有元素就是一个场景(Scene)。

      (上述定义从某个角度告诉我们,场景是一系列游戏元素的集合,但这不能很好地说明什么是场景)

      场景包含哪些元素?

    • 摄像机 Camera
    • 图层 Layer
    • 物体 Body
    • 外部资源 Resource

      场景摄像机

    • 摄像机是场景中一类特殊对象,几乎具有可视化对象的全部属性与行为,但它是不可见的
    • 摄像机与场景绘制紧密相关,平面变换、效果和动画都将作用于摄像机裁剪时或裁剪后的画面
    • 场景中允许多个摄像机存在,但同一时间最多一个会被激活
    • 通过摄像机实现场景虚拟化,由可视化元素是否在摄像机视口内决定它是否要被绘制

      资源加载与预绘制 

    • 场景绘制与更新前需要先加载外部资源和预绘制
    • 外部资源包括贴图、音频、文本和用户自定义数据
    • 预绘制完成内存占用较多的缓存对象的绘制
    • 若加载花费一段时间,需要向用户提供加载动画
    • 不同场景之间资源不共享,这意味着切换场景必须重新加载资源

    新葡亰496net 3

    图1-1 可视对象接口继承层次(仅供参考)

    准备

      IDE:VisualStudio 2015
      Language:VB.NET/C#
      图形API:Win2D
      MSDN教程:UWP游戏开发
    

     

    【印】香卡(Shankar,A.R.)著

    第二节 图层

           你试图向我描述回忆画面,远处缥缈隐现的连绵山峰,近处一片相对开阔的草地,天空似乎还有着淅沥的小雨。不像3D画面可以天然的展现景深关系,2D需要依赖图层(Layer)来实现。

      (分层绘制不仅能表达景深,还可以很容易地为不同图层定制不同的行为)

      图层怎么分类?

    • 静态层 StaticLayer
    • 动态层 AnimateLayer
    • UI层 ControlLayer

      静态层

    • 通常由一副静态图像组成,玩家不能改变其中的内容
    • 一些景深丰富的游戏还会有超前景图层,它也是静态的

      动态层

    • 玩家直接控制的角色所在的图层
    • 主景图层通常由区块( Tile )和角色( Character )组成
    • 区块构成场景环境,角色则在区块上活动
    • 区块严格意义上不是静态的,可能会有来自玩家的破坏

      UI层

    • 展现UI的图层,比如显示消息框、文本框或按钮
    • 有时候用户接触的 UI 可能来自外部,而不是场景中的元素

    新葡亰496net 4

    图2-1 图层类继承层次(仅供参考)

    第二节 图层

           你试图向我描述回忆画面,远处缥缈隐现的连绵山峰,近处一片相对开阔的草地,天空似乎还有着淅沥的小雨。不像3D画面可以天然的展现景深关系,2D需要依赖图层(Layer)来实现。

      (分层绘制不仅能表达景深,还可以很容易地为不同图层定制不同的行为)

      图层怎么分类?

    • 静态层 StaticLayer
    • 动态层 AnimateLayer
    • UI层 ControlLayer

      静态层

    • 通常由一副静态图像组成,玩家不能改变其中的内容
    • 一些景深丰富的游戏还会有超前景图层,它也是静态的

      动态层

    • 玩家直接控制的角色所在的图层
    • 主景图层通常由区块(Tile)和角色(Character)组成
    • 区块构成场景环境,角色则在区块上活动
    • 区块严格意义上不是静态的,可能会有来自玩家的破坏

      UI层

    • 展现UI的图层,比如显示消息框、文本框或按钮
    • 有时候用户接触的UI可能来自外部,而不是场景中的元素

    新葡亰496net 5

    图2-1 图层类继承层次(仅供参考)

    写在前面的话

           没有什么比重复造轮子更让人心碎的事情了。
    

      (如果有,那就是造了两遍)

      游戏开发涉及哪些技术?

    • 游戏开发是一门复杂的艺术,编码方面你需要考虑图形、输入和网络
    • 以及相对独立的音频、物理仿真和AI引擎等,每一个部分单独开发都一场是旷日持久的“战斗”
    • 美术、音乐和剧本也是组成游戏的重要部分,当然引擎不必包含这些素材

      不要试图一个人去完成所有的事情

    • 设计和实现完整的游戏引擎并不是一件轻松的事情
    • 制定几个特定的目标,然后将有限的时间花在这些“简单的”但靠谱的目标上
    • 得益于开源社区,你可以很便捷的找到各类完善的开源引擎,懂得借鉴它们并完善自己。

    编辑推荐

    谢光磊译

    第三节 物体

           我对你的回忆产生了兴趣并希望了解更多的细节,你向我继续描述,草地上青草随风浮动,天空偶有不知名的鸟儿飞过。具体的某个可视化元素我们称之为物体(Body)。

          (一般情况下,2D 游戏中的物体是一个 Sprite)

       物体有哪些属性?

    • 平面变换 Transform:描述元素的平面变换
    • 外观 Appearance:描述元素的外观
    • 附加组件 Compnent:表示附加在元素上的游戏组件

      平面变换

    • 平移 Translation :元素在场景中的位置
    • 旋转 Rotation :元素绕旋转中心旋转
    • 缩放 Scale :元素垂直或水平缩放

      外观

    • 可见性 Visible :元素是否可见
    • 透明度 Opacity :元素不透明度

      *模型与视图分离

    • 模型是游戏中可视化对象的数据
    • 视图是决定如何渲染模型的对象
    • 分离的好处之一是同一模型可绑定不同的视图
    • 改变一个模型的渲染行为,只要改变与它绑定的视图即可  

    新葡亰496net 6

    图3-1 视图类继承层次(仅供参考)

    第三节 物体

           我对你的回忆产生了兴趣并希望了解更多的细节,你向我继续描述,草地上青草随风浮动,天空偶有不知名的鸟儿飞过。具体的某个可视化元素我们称之为物体(Body)。

          (一般情况下,2D游戏中的物体是一个Sprite)

       物体有哪些属性?

    • 平面变换Transform:描述元素的平面变换
    • 外观 Appearance:描述元素的外观
    • 附加组件 Compnent:表示附加在元素上的游戏组件

      平面变换

    • 平移Translation:元素在场景中的位置
    • 旋转Rotation:元素绕旋转中心旋转
    • 缩放Scale:元素垂直或水平缩放

      外观

    • 可见性Visible:元素是否可见
    • 透明度Opacity:元素不透明度

      *模型与视图分离

    • 模型是游戏中可视化对象的数据
    • 视图是决定如何渲染模型的对象
    • 分离的好处之一是同一模型可绑定不同的视图
    • 改变一个模型的渲染行为,只要改变与它绑定的视图即可  

    新葡亰496net 7

    图3-1 视图类继承层次(仅供参考)

    第一节 场景

           你轻轻闭上眼睛,脑海中回想起过往的某个画面,美好的画面喻示着你此刻的心情还不错。我们称组成这个画面的所有元素就是一个场景(Scene)。
    

      (上述定义从某个角度告诉我们,场景是一系列游戏元素的集合,但这不能很好地说明什么是场景)

      场景包含哪些元素?

    • 摄像机 Camera
    • 图层 Layer
    • 物体 Body
    • 外部资源 Resource

      场景摄像机

    • 摄像机是场景中一类特殊对象,几乎具有可视化对象的全部属性与行为,但它是不可见的
    • 摄像机与场景绘制紧密相关,平面变换、效果和动画都将作用于摄像机裁剪时或裁剪后的画面
    • 场景中允许多个摄像机存在,但同一时间最多一个会被激活
    • 通过摄像机实现场景虚拟化,由可视化元素是否在摄像机视口内决定它是否要被绘制

      资源加载与预绘制 

    • 场景绘制与更新前需要先加载外部资源和预绘制
    • 外部资源包括贴图、音频、文本和用户自定义数据
    • 预绘制完成内存占用较多的缓存对象的绘制
    • 若加载花费一段时间,需要向用户提供加载动画
    • 不同场景之间资源不共享,这意味着切换场景必须重新加载资源

    图1.1 可视对象接口继承层次

    在一名专业的游戏开发者指导下,你将开发出两款完整的HTML5游戏:一款与《愤怒的小鸟》类似,基于Box2d物理引擎的策略益智类游戏和一个包括单位、建筑、路径导航、人工智能、多玩家对战模式的即时战略(RTS)游戏。开发游戏的过程中,你将学到以下知识:
                在游戏中引入Box2d物理引擎以模拟现实的物理环境。
                设计游戏场景、游戏角色,并允许玩家与之交互。
                使用子画面页(精灵图)、平移、视差滚动和音效制作更精致的游戏。
                引入路径规划和导航算法来使单位智能地移动。
                使用决策树、有限状态机和脚本事件来创建更聪明的敌人和更具挑战性的关卡。
                使用Node.js和WebSocket API为游戏添加多人战斗模式。

    ISBN 978-7-121-21226-0

    第四节 行为

           你继续回忆,脑海中画面不断的变化,有新的景象出现,也有旧的消失不见。画面中总有一些元素是动态的(Dynamic),它们具有自己特定的行为(Behavior)。

      (行为就是游戏元素做出动作,发出声音,作出反应)

      元素有哪些行为?

    • 初始化 Start 
    • 更新 Update 
    • 事件 Event
    • 绘制 Draw

      初始化

    • 完成元素初始化的操作
    • 比如指定元素的初始位置,绑定事件等
    • 通常在整个元素的生命周期中初始化只进行一次
    • 多次初始化可能会导致某个事件多次绑定事件处理程序

      更新

    • 每帧调用并执行的操作
    • 通常更新帧率与绘制帧率保持一致
    • 有的游戏元素没必要每帧都更新,比如计算量大的 AI

      事件

    • 为某个事件提供事件通知
    • 可以动态的为某个事件注册事件处理程序
    • 事件处理机制可为游戏元素实现丰富的行为

      绘制

    • 只有可视化的对象具有该行为
    • 为节约性能,一个可绘制的元素可以缓存成静态图像
    • 为保证画面在不同机器上的流畅性,需要设定渲染级别

      *元素集合变动 

    • 游戏过程中修改游戏元素集合会导致集合不能遍历
    • 一种方法是先将集合改动的行为缓存起来,当一帧结束后再执行这些行为
    • 另一种方法是使用线程安全的集合,在集合遍历期间的更新操作将会被阻塞 

    新葡亰496net 8

    图4-1 不同行为预制件类继承层次(仅供参考)

    第四节 行为

           你继续回忆,脑海中画面不断的变化,有新的景象出现,也有旧的消失不见。画面中总有一些元素是动态的(Dynamic),它们具有自己特定的行为(Behavior)。

      (行为就是游戏元素做出动作,发出声音,作出反应)

      元素有哪些行为?

    • 初始化 Start 
    • 更新 Update 
    • 事件 Event
    • 绘制 Draw

      初始化

    • 完成元素初始化的操作
    • 比如指定元素的初始位置,绑定事件等
    • 通常在整个元素的生命周期中初始化只进行一次
    • 多次初始化可能会导致某个事件多次绑定事件处理程序

      更新

    • 每帧调用并执行的操作
    • 通常更新帧率与绘制帧率保持一致
    • 有的游戏元素没必要每帧都更新,比如计算量大的AI

      事件

    • 为某个事件提供事件通知
    • 可以动态的为某个事件注册事件处理程序
    • 事件处理机制可为游戏元素实现丰富的行为

      绘制

    • 只有可视化的对象具有该行为
    • 为节约性能,一个可绘制的元素可以缓存成静态图像
    • 为保证画面在不同机器上的流畅性,需要设定渲染级别

      *元素集合变动 

    • 游戏过程中修改游戏元素集合会导致集合不能遍历
    • 一种方法是先将集合改动的行为缓存起来,当一帧结束后再执行这些行为
    • 另一种方法是使用线程安全的集合,在集合遍历期间的更新操作将会被阻塞 

    新葡亰496net 9

    图4-1 不同行为预制件类继承层次(仅供参考)

    第二节 图层

           你试图向我描述回忆画面,远处缥缈隐现的连绵山峰,近处一片相对开阔的草地,天空似乎还有着淅沥的小雨。不像3D画面可以天然的展现景深关系,2D需要依赖图层(Layer)来实现。
    

      (分层绘制不仅能表达景深,还可以很容易地为不同图层定制不同的行为)

      图层怎么分类?

    • 静态层 StaticLayer
    • 动态层 AnimateLayer
    • UI层 ControlLayer

      静态层

    • 通常由一副静态图像组成,玩家不能改变其中的内容
    • 一些景深丰富的游戏还会有超前景图层,它也是静态的

      动态层

    • 玩家直接控制的角色所在的图层
    • 主景图层通常由区块(Tile)和角色(Character)组成
    • 区块构成场景环境,角色则在区块上活动
    • 区块严格意义上不是静态的,可能会有来自玩家的破坏

      UI层

    • 展现UI的图层,比如显示消息框、文本框或按钮
    • 有时候用户接触的UI可能来自外部,而不是场景中的元素

    图2.1 图层类继承层次

    阅读本书,你的HTML5/JavaScript编程水平将大进一步。你学到的知识和技术,将帮助你开发出更复杂、更精致的HTML5游戏,帮助你成为专业级的HTML5游戏开发者。

    2013年9月出版

    第五节 组件

           我吐槽你没有什么想象力,你描述的画面中蜻蜓和鸟儿都是在飞,而不是其中一个会在陆地上飞奔。通常不同的元素很有可能会具有相同的行为,这类行为可以封装为组件(Compnent)。

      (组件有自己的属性、方法和事件,但它们不能独立存在,必须附加在游戏物体上)

      有哪些类型的组件?

    • 动画器 Animation
    • 效果器 Effect
    • 音效器 Audio
    • 触发器 Trigger
    • 命令器 Command
    • 行为器 Behavior

      动画器

    • 附加于游戏对象的动画器在时间线的控制下播放一段动画
    • 多种动画经常组合在一起,比如角色跳跃时既有帧位图动画也有按路径移动的动画
    • 理想情况下,游戏中应使用尽可能多的动画来增强画面效果,使得游戏更具有吸引力

      音效器

    • 附加于游戏对象的音效器用于播放一段音频
    • 音效对烘托游戏环境气氛起着十分关键的作用
    • 音效器最有必要体现的是动态感和方位感
    • 高性能的音效引擎应该是低延迟的且支持动态缓冲
    • XAudio2 支持同步采样准确播放以及隐式源速率转换

      效果器

    • 平面变换 Transform :平移、旋转和缩放
    • 高斯模糊 GaussianBlur :减少噪声或降低细节层次
    • 颜色矩阵 ColorMatrix :特殊的位图颜色变化效果
    • 光照效果 Light :点光源,方向光源,全局光照
    • 阴影效果 Shadow :生成模糊的阴影

      触发器

    • 触发器由三个部分组成,事件、条件、动作
    • 事件:当某个事件发生的时候就运行触发器
    • 条件:判断是否达到指定的条件,如果没有达到条件将不执行动作
    • 动作:条件通过后所要做的事情

      命令器(行为器)

    • 命令器和行为器是决定游戏对象如何进行动作的附加对象
    • 命令器是行为器的超集,前者区别于后者是它在每帧都会有更新行为
    • 很显然,行为器只是控制下一步的动作,命令器则是控制时间线上的一系列动作

     

    新葡亰496net 10

    图5-1 组件接口继承层次(仅供参考)

    第五节 组件

           我吐槽你没有什么想象力,你描述的画面中蜻蜓和鸟儿都是在飞,而不是其中一个会在陆地上飞奔。通常不同的元素很有可能会具有相同的行为,这类行为可以封装为组件(Compnent)。

      (组件有自己的属性、方法和事件,但它们不能独立存在,必须附加在游戏物体上)

      有哪些类型的组件?

    • 动画器 Animation
    • 效果器 Effect
    • 音效器 Audio
    • 触发器 Trigger
    • 命令器 Command
    • 行为器 Behavior

      动画器

    • 附加于游戏对象的动画器在时间线的控制下播放一段动画
    • 多种动画经常组合在一起,比如角色跳跃时既有帧位图动画也有按路径移动的动画
    • 理想情况下,游戏中应使用尽可能多的动画来增强画面效果,使得游戏更具有吸引力

      音效器

    • 附加于游戏对象的音效器用于播放一段音频
    • 音效对烘托游戏环境气氛起着十分关键的作用
    • 音效器最有必要体现的是动态感和方位感
    • 高性能的音效引擎应该是低延迟的且支持动态缓冲
    • XAudio2支持同步采样准确播放以及隐式源速率转换

      效果器

    • 平面变换Transform:平移、旋转和缩放
    • 高斯模糊GaussianBlur:减少噪声或降低细节层次
    • 颜色矩阵ColorMatrix:特殊的位图颜色变化效果
    • 光照效果Light:点光源,方向光源,全局光照
    • 阴影效果Shadow:生成模糊的阴影

      触发器

    • 触发器由三个部分组成,事件、条件、动作
    • 事件:当某个事件发生的时候就运行触发器
    • 条件:判断是否达到指定的条件,如果没有达到条件将不执行动作
    • 动作:条件通过后所要做的事情

      命令器(行为器)

    • 命令器和行为器是决定游戏对象如何进行动作的附加对象
    • 命令器是行为器的超集,前者区别于后者是它在每帧都会有更新行为
    • 很显然,行为器只是控制下一步的动作,命令器则是控制时间线上的一系列动作

     

    新葡亰496net 11

    图5-1 组件接口继承层次(仅供参考)

    第三节 物体

           我对你的回忆产生了兴趣并希望了解更多的细节,你向我继续描述,草地上青草随风浮动,天空偶有不知名的鸟儿飞过。具体的某个可视化元素我们称之为物体(Body)。
    

          (一般情况下,2D游戏中的物体是一个Sprite)

       物体有哪些属性?

    • 平面变换Transform:描述元素的平面变换
    • 外观 Appearance:描述元素的外观
    • 附加组件 Compnent:表示附加在元素上的游戏组件

      平面变换

    • 平移Translation:元素在场景中的位置
    • 旋转Rotation:元素绕旋转中心旋转
    • 缩放Scale:元素垂直或水平缩放

      外观

    • 可见性Visible:元素是否可见
    • 透明度Opacity:元素不透明度

      *模型与视图分离

    • 模型是游戏中可视化对象的数据
    • 视图是决定如何渲染模型的对象
    • 分离的好处之一是同一模型可绑定不同的视图
    • 改变一个模型的渲染行为,只要改变与它绑定的视图即可  

    图3.1 视图类继承层次

    内容提要

    定价:79.00元

    第六节 真实

      你回应这是真实的回忆而不是梦境,鸟儿只会在蓝天翱翔。事实上,游戏不是真实的(Reality),只是感觉上有些真实。

      (游戏中尽量让玩家感受真实的部分就是物理仿真与游戏AI)

      物理引擎

    • 物理引擎通过为刚性物体赋予真实的物理属性的方式来计算刚体运动、旋转和碰撞
    • 为每个游戏或者每个游戏对象使用物理引擎并不是完全必要的
    • 取决于需求,游戏运行时的物体引擎需要平衡实时性和高精度两者

      Box2D

    • Box2D 以固定的离散时间步长实现游戏物理世界的仿真
    • Box2D 提供了支持像圆形或多边形这样的几何形状的刚体仿真
    • Box2D 可用关节连接不同的形状,还可以包括关节马达和滑轮

      游戏AI

    • 游戏AI是游戏中能够像人一样思考和行动的元素
    • AI设计需要考虑趣味性、随机性和难度三个因素
    • AI三大系统主要是感知系统、导航系统和决策系统

      AI分层

    • 感知事件层:对输入的信息进行过滤和分配
    • 行为层:具体描述如何执行指定动作
    • 动画层:判断哪组动画更符合当前游戏状态
    • 运动层:处理探路、碰撞和躲避等行为
    • 短期决策层:AI 实体短幅视距上的智能处理层
    • 长期决策层:AI 实体开阔视距上的智能处理层
    • 基于位置的信息层:包括来自影响图、智能地形或类似结构的信息

      *蜻蜓在地上飞奔

    • 违背真实性或荒诞不经的设定虽然讨趣,但最好不要让玩家有上当的感觉
    • 除非你在一开始就告诉他,如游戏名字叫《地上飞奔的蜻蜓》,玩家才可能会原谅你
    • 不符合直觉的设计通常是糟糕透顶的,但有时候这些设计可能带来突破性的新颖玩法

    新葡亰496net 12

    图6-1 物理引擎关节类继承层次(仅供参考)

    第六节 真实

      你回应这是真实的回忆而不是梦境,鸟儿只会在蓝天翱翔。事实上,游戏不是真实的(Reality),只是感觉上有些真实。

      (游戏中尽量让玩家感受真实的部分就是物理仿真与游戏AI)

      物理引擎

    • 物理引擎通过为刚性物体赋予真实的物理属性的方式来计算刚体运动、旋转和碰撞
    • 为每个游戏或者每个游戏对象使用物理引擎并不是完全必要的
    • 取决于需求,游戏运行时的物体引擎需要平衡实时性和高精度两者

      Box2D

    • Box2D以固定的离散时间步长实现游戏物理世界的仿真
    • Box2D提供了支持像圆形或多边形这样的几何形状的刚体仿真
    • Box2D可用关节连接不同的形状,还可以包括关节马达和滑轮

      游戏AI

    • 游戏AI是游戏中能够像人一样思考和行动的元素
    • AI设计需要考虑趣味性、随机性和难度三个因素
    • AI三大系统主要是感知系统、导航系统和决策系统

      AI分层

    • 感知事件层:对输入的信息进行过滤和分配
    • 行为层:具体描述如何执行指定动作
    • 动画层:判断哪组动画更符合当前游戏状态
    • 运动层:处理探路、碰撞和躲避等行为
    • 短期决策层:AI实体短幅视距上的智能处理层
    • 长期决策层:AI实体开阔视距上的智能处理层
    • 基于位置的信息层:包括来自影响图、智能地形或类似结构的信息

      *蜻蜓在地上飞奔

    • 违背真实性或荒诞不经的设定虽然讨趣,但最好不要让玩家有上当的感觉
    • 除非你在一开始就告诉他,如游戏名字叫《地上飞奔的蜻蜓》,玩家才可能会原谅你
    • 不符合直觉的设计通常是糟糕透顶的,但有时候这些设计可能带来突破性的新颖玩法

    新葡亰496net 13

    新葡亰496net:HTML5游戏开发进阶指南,快速开发2D游戏引擎。图6-1 物理引擎关节类继承层次(仅供参考)

    第四节 行为

           你继续回忆,脑海中画面不断的变化,有新的景象出现,也有旧的消失不见。画面中总有一些元素是动态的(Dynamic),它们具有自己特定的行为(Behavior)。
    

      (行为就是游戏元素做出动作,发出声音,作出反应)

      元素有哪些行为?

    • 初始化 Start 
    • 更新 Update 
    • 事件 Event
    • 绘制 Draw

      初始化

    • 完成元素初始化的操作
    • 比如指定元素的初始位置,绑定事件等
    • 通常在整个元素的生命周期中初始化只进行一次
    • 多次初始化可能会导致某个事件多次绑定事件处理程序

      更新

    • 每帧调用并执行的操作
    • 通常更新帧率与绘制帧率保持一致
    • 有的游戏元素没必要每帧都更新,比如计算量大的AI

      事件

    • 为某个事件提供事件通知
    • 可以动态的为某个事件注册事件处理程序
    • 事件处理机制可为游戏元素实现丰富的行为

      绘制

    • 只有可视化的对象具有该行为
    • 为节约性能,一个可绘制的元素可以缓存成静态图像
    • 为保证画面在不同机器上的流畅性,需要设定渲染级别

      *元素集合变动 

    • 游戏过程中修改游戏元素集合会导致集合不能遍历
    • 一种方法是先将集合改动的行为缓存起来,当一帧结束后再执行这些行为
    • 另一种方法是使用线程安全的集合,在集合遍历期间的更新操作将会被阻塞 

    图5.1 不同行为预制件类继承层次

    本书介绍了HTML5 游戏开发的一般过程和技巧。全书共分12 章,第1 章介绍了本书相关的HTML5的诸多新特性,包括在canvas 上绘图、播放声音等,另外还引入了子画面页的概念;第2~4 章利用Box2D物理引擎开发了一款非常类似于《愤怒的小鸟》的游戏,全面介绍了物理引擎的概念,以及在游戏中使用物理引擎的方法,这一部分还引入了视差滚动技巧,以实现某种伪3D 效果;第5~10 章开发了一款简化版的《红色警戒》游戏,这一部分涉及了相当多的内容,包括地图的制作,建筑与单位的设定、绘制,玩家与单位的互动,触发器与剧情的编写,路径规划算法等;第11、12 章利用nodeJS 和WebSocket 开发了《红色警戒》游戏的多人对战模式,这一部分的主要问题是保持游戏在多个玩家的浏览器中的状态一致。

    412页

    附录

      笔者参与的适用于 UWP 的游戏引擎:

      GitHub:EDGameEngine

      作者:ExperDot

      复杂度:新葡亰496net 14

      简介:适用于UWP的2D游戏图形引擎 ,提供丰富的游戏模型库与组件库

      说明:整合了我之前博客里的自然树、粒子系统和自动绘图模型,以及一些有趣的效果组件

     

      GitHub:N2Engine

      作者:Nukepayload2

      复杂度:新葡亰496net 15

      简介:用于支持任意能够生成可移植类库的.NET语言制作基于 Win2D 和 MonoGame 两种图形框架的跨平台游戏

      说明:目前完成度低,你可以在 Issue 中浏览 Stone1.0 的完整设计(对此感兴趣也可以贡献 Contributions )

      参考书籍

      《AI Game Engine Programming》 style="color: #000000;">[美] BrianSchwab 著

      《Object-Oriented Game Development》 style="color: #000000;">[美] Julian Gold 著

      《Ulimate Game Design-Building Game Worlds》 style="color: #000000;">[美] Tom Meigs 著

    附录

      笔者参与的适用于UWP的游戏引擎:

      开源:GitHub.EDGameEngine

      作者:ExperDot

      复杂度:新葡亰496net 16

      简介:适用于UWP的2D游戏图形引擎 ,提供丰富的游戏模型库与组件库

      说明:整合了我之前博客里的自然树、粒子系统和自动绘图模型,以及一些有趣的效果组件

     

      开源:GitHub.N2Engine

      作者:Nukepayload2

      复杂度:新葡亰496net 17

      简介:用于支持任意能够生成可移植类库的.NET语言制作基于 Win2D 和 MonoGame 两种图形框架的跨平台游戏

      说明:目前完成度低,你可以在Issue中浏览Stone1.0的完整设计(对此感兴趣也可以贡献Contributions)

      参考书籍

      《AI Game Engine Programming》 style="color: #888888;">(美) BrianSchwab 著

      《Object-Oriented Game Development》 style="color: #888888;">(美) Julian Gold 著

      《Ulimate Game Design-Building Game Worlds》 style="color: #888888;">(美) Tom Meigs 著

    第五节 组件

           我吐槽你没有什么想象力,你描述的画面中蜻蜓和鸟儿都是在飞,而不是其中一个会在陆地上飞奔。通常不同的元素很有可能会具有相同的行为,这类行为可以封装为组件(Compnent)。
    

      (组件有自己的属性、方法和事件,但它们不能独立存在,必须附加在游戏物体上)

      有哪些类型的组件?

    • 动画器 Animation
    • 效果器 Effect
    • 音效器 Audio
    • 触发器 Trigger
    • 命令器 Command
    • 行为器 Behavior

      动画器

    • 附加于游戏对象的动画器在时间线的控制下播放一段动画
    • 多种动画经常组合在一起,比如角色跳跃时既有帧位图动画也有按路径移动的动画
    • 理想情况下,游戏中应使用尽可能多的动画来增强画面效果,使得游戏更具有吸引力

      音效器

    • 附加于游戏对象的音效器用于播放一段音频
    • 音效对烘托游戏环境气氛起着十分关键的作用
    • 音效器最有必要体现的是动态感和方位感
    • 高性能的音效引擎应该是低延迟的且支持动态缓冲
    • XAudio2支持同步采样准确播放以及隐式源速率转换

      效果器

    • 平面变换Transform:平移、旋转和缩放
    • 高斯模糊GaussianBlur:减少噪声或降低细节层次
    • 颜色矩阵ColorMatrix:特殊的位图颜色变化效果
    • 光照效果Light:点光源,方向光源,全局光照
    • 阴影效果Shadow:生成模糊的阴影

      触发器

    • 触发器由三个部分组成,事件、条件、动作
    • 事件:当某个事件发生的时候就运行触发器
    • 条件:判断是否达到指定的条件,如果没有达到条件将不执行动作
    • 动作:条件通过后所要做的事情

      命令器(行为器)

    • 命令器和行为器是决定游戏对象如何进行动作的附加对象
    • 命令器是行为器的超集,前者区别于后者是它在每帧都会有更新行为
    • 很显然,行为器只是控制下一步的动作,命令器则是控制时间线上的一系列动作

    新葡亰496net:HTML5游戏开发进阶指南,快速开发2D游戏引擎。 

    新葡亰496net 18

    图5.1 组件接口继承层次

    对于熟悉前端开发,想用前端技术做一些更酷的事情,却又不知如何下手的人,这是一本可多得的好书。

    16开
    新葡亰496net 19

    第六节 真实

      你回应这是真实的回忆而不是梦境,鸟儿只会在蓝天翱翔。事实上,游戏不是真实的(Reality),只是感觉上有些真实。
    

      (游戏设计中尽量让玩家感受真实的部分就是物理仿真与游戏AI)

      物理引擎

    • 物理引擎通过为刚性物体赋予真实的物理属性的方式来计算刚体运动、旋转和碰撞
    • 为每个游戏或者每个游戏对象使用物理引擎并不是完全必要的
    • 取决于需求,游戏运行时的物体引擎需要平衡实时性和高精度两者

      Box2D

    • Box2D以固定的离散时间步长实现游戏物理世界的仿真
    • Box2D提供了支持像圆形或多边形这样的几何形状的刚体仿真
    • Box2D可用关节连接不同的形状,还可以包括关节马达和滑轮

      游戏AI

    • 游戏AI是游戏中能够像人一样思考和行动的元素
    • AI设计需要考虑趣味性、随机性和难度三个因素
    • AI三大系统主要是感知系统、导航系统和决策系统

      AI分层

    • 感知事件层:对输入的信息进行过滤和分配
    • 行为层:具体描述如何执行指定动作
    • 动画层:判断哪组动画更符合当前游戏状态
    • 运动层:处理探路、碰撞和躲避等行为
    • 短期决策层:AI实体短幅视距上的智能处理层
    • 长期决策层:AI实体开阔视距上的智能处理层
    • 基于位置的信息层:包括来自影响图、智能地形或类似结构的信息

      *蜻蜓在地上飞奔

    • 违背真实性或荒诞不经的设定虽然讨趣,但最好不要让玩家有上当的感觉
    • 除非你在一开始就告诉他,如游戏名字叫《地上飞奔的蜻蜓》,玩家才可能会原谅你
    • 不符合直觉的设计通常是糟糕透顶的,但有时候这些设计可能带来突破性的新颖玩法

    图6.1 物理引擎关节类继承层次

    精彩节摘

    编辑推荐

    附录

      下面,为你介绍两款适用于UWP的游戏引擎

          开源:GitHub.EDGameEngine
          作者:ExperDot
      复杂度:
      简介:适用于UWP的2D游戏图形引擎 ,提供丰富的游戏模型库与组件库
      说明:整合了我之前博客里的自然树、粒子系统和自动绘图模型,以及一些有趣的效果组件
    

     

          开源:GitHub.N2Engine
          作者:Nukepayload2
      复杂度:
      简介:用于支持任意能够生成可移植类库的.NET语言制作基于 Win2D 和 MonoGame 两种图形框架的跨平台游戏
      说明:目前完成度低,你可以在Issue中浏览Stone1.0的完整设计(对此感兴趣也可以贡献Contributions)
    

      参考书籍

      《AI Game Engine Programming》(美) BrianSchwab 著
      《Object-Oriented Game Development》(美) Julian Gold 著
      《Ulimate Game Design-Building Game Worlds》(美) Tom Meigs 著
    

    准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 写在前面的话 没有什么...

    译者序

    在一名专业的游戏开发者指导下,你将开发出两款完整的HTML5游戏:一款与《愤怒的小鸟》类似,基于Box2d物理引擎的策略益智类游戏和一个包括单位、建筑、路径导航、人工智能、多玩家对战模式的即时战略(RTS)游戏。开发游戏的过程中,你将学到以下知识:

    香港回归那一年的某一天,我第一次在同学家的电脑上观摩了他玩《红色警戒95》这款游戏的过程。至今我依然记得,当时他操纵着一辆吉普车和几名步兵,在地图上探索。队伍所到之处,原先覆盖着的黑色迷雾就会散去,显现出其下的地形来。说实话,我被这个效果深深地震撼了。不久,父母为家里添置了一台电脑,我也如愿以偿地玩上了这款游戏。事实上,作为20世纪80年代末出生的一批人,电子游戏伴随我度过了几乎整个少年时代。

    •        在游戏中引入Box2d物理引擎以模拟现实的物理环境。
    •        设计游戏场景、游戏角色,并允许玩家与之交互。
    •        使用子画面页(精灵图)、平移、视差滚动和音效制作更精致的游戏。
    •        引入路径规划和导航算法来使单位智能地移动。
    •        使用决策树、有限状态机和脚本事件来创建更聪明的敌人和更具挑战性的关卡。
    •        使用Node.js和WebSocket API为游戏添加多人战斗模式。

    一款优秀的游戏就好像一部引人入胜的小说(如《仙剑奇侠传》《空之轨迹》),或者一部伟大的百科全书(如《文明》《三国志》),令人击节称赞。不同的是,电子游戏带给玩家的沉浸感,比书籍带给读者的更加直接和浓烈。我无数次萌生出这样的念头:如果能制作出自己的游戏——制作游戏场景和背景音乐,设定角色与怪物的外形和技能,建立战斗系统与剧情——那多好。所以,作为读者的你,应当可以想象出,当得知有机会翻译一本关于游戏编程的书籍之时,我该有多兴奋。

    阅读本书,你的HTML5/JavaScript编程水平将大进一步。你学到的知识和技术,将帮助你开发出更复杂、更精致的HTML5游戏,帮助你成为专业级的HTML5游戏开发者。

    这本书名为《HTML5游戏开发进阶指南》,顾名思义,讲的是如何开发HTML5游戏。HTML诞生之初仅仅是用来结构化文档信息,并创建可在浏览器上显示的网页。事实上,最初版本的HTML连图片都无法显示,页面仅由标题、文字段落和指向其他页面的链接组成。随着互联网的发展,HTML逐渐变成了今天的样子。我们在花花绿绿的网页上浏览新闻、观看视频、听音乐、购物、更新Facebook状态、与同事聊天,甚至玩游戏——今天的HTML,早已不是一页A4纸,而是能够与用户深度交互的平台。

    内容提要

    HTML5是最新的HTML标准,其诸多新特性中,最令人期待的一点莫过于新的标签<canvas>。开发者可以在<canvas>中几乎不受限制地绘图,就像在Windows下使用GDI函数一样;在部分浏览器中,开发者甚至可以在<canvas>中绘制三维场景,就像使用openGL一样。结合requestAnimationFrame或setTimeInterval,这个标签简直就是为游戏设计的。这本书主要介绍的就是如何使用<canvas>标签进行游戏开发。

    本书介绍了HTML5游戏开发的一般过程和技巧。全书共分12 章,第1章介绍了本书相关的HTML5的诸多新特性,包括在canvas上绘图、播放声音等,另外还引入了子画面页的概念;第2~4 章利用Box2D物理引擎开发了一款非常类似于《愤怒的小鸟》的游戏,全面介绍了物理引擎的概念,以及在游戏中使用物理引擎的方法,这一部分还引入了视差滚动技巧,以实现某种伪3D效果;第5~10 章开发了一款简化版的《红色警戒》游戏,这一部分涉及了相当多的内容,包括地图的制作,建筑与单位的设定、绘制,玩家与单位的互动,触发器与剧情的编写,路径规划算法等;第11、12章利用nodeJS 和WebSocket开发了《红色警戒》游戏的多人对战模式,这一部分的主要问题是保持游戏在多个玩家的浏览器中的状态一致。

    本书手把手地带领读者实现了两款HTML5游戏:前4章实现了一个类似于《愤怒地小鸟》的游戏。后8章实现了一款简化版的《红色警戒》游戏。再简单的逻辑从零开始实现,都不是一件容易的事情,对于这两款游戏,虽然看上去简单,但绝不是随随便便就能够写出来的。事实上,原作者力求这两款游戏臻于完善,并在书中详尽地阐述了游戏的细节:比如作者在绘制第一款游戏中的弹弓和橡胶带时,为了使橡胶带看上去很自然,而将弹弓分为两部分;又如,作者在第二款游戏中,为了防止车辆在地图上移动时发生“阻塞”而进行的努力。

    对于熟悉前端开发,想用前端技术做一些更酷的事情,却又不知如何下手的人,这是一本可多得的好书。

    对于熟悉前端开发,又想在前端有所作为的开发者,这是一本不可多得的好书。书中模块化的JavaScript代码,以及将琐碎的功能模块拼装成整体的方式,值得学习;本书介绍了很多游戏编程常用的技巧,如使用子画面页以优化性能,使用视差滚动以产生3D效果等。另外,还介绍了一些开源的游戏算法实现,如JavaScript版本的Box2D物理引擎、A*路径规划算法等。最后涉及使用Node.js构建多人战役的方法,如果你对服务器端的JavaScript感兴趣,你也应该来读一读这本书。

    目录

    总之,在读完本书之后,相信你一定知道如何着手去开发一款HTML5游戏。
     
    谢光磊

    第1章 HTML5与JavaScript概要      1

    作者简介

    1.1  canvas元素  2

    Aditya Ravi Shankar是在1993年第一次接触计算机之后开始学习编程的。当时还没有互联网和在线教程,他在当地图书馆找到一本编程书籍,并通过艰苦地重写书中的代码,编写了他的第一个GW-BASIC游戏。

    1.1.1  绘制矩形   3

    2001年,他从印度理工学院毕业之后,做了近10年的软件顾问,为投资银行和大型企业开发交易与分析系统。最后,他离开了这个行业,这样他可以专注于从事自己所热爱的游戏开发。

    1.1.2  绘制复杂形状或路径        5

    从此,作为一个自信的极客,他使用各种新的语言和技术来进行自己的项目和实验,包括HTML5。在这期间,他独立在HTML5平台上重建了著名的命令与征服RTS游戏,他也因此而著名。

    1.1.3  绘制文本   7

    除了编程,Aditya还喜欢桌球、萨尔萨舞,以及学习发挥潜意识。他在其个人站点(www.adityaravishankar.com)中有一些关于游戏编程、个人发展和桌球的文章。

    1.1.4  自定义画笔样式(颜色和纹理)   8

    当他不忙于写作,或者不用专注于自己的项目时,他也会做一些咨询工作,以帮助企业来使用新的软件产品。
     
    译者简介

    1.1.5  绘制图像   9

    谢光磊,中科院某所硕士研究生在读。热爱生活,热爱Web前端开发,热爱WebGL技术。理想是成为一流的游戏设计师。个人站点:www.xieguanglei.com。
     
    技术审核者简介

    1.1.6  平移和旋转        10

    Shane Hudson是一位自由的Web站点开发者,专注于最前沿的Web技术和Web标准。他曾经参与过大量交互式Web站点的工作并辅助项目的开发,具有丰富的使用JavaScript的经验。他对人工智能和计算机视觉具有浓厚的兴趣,他的E-mail地址是[email protected] son.net。

    1.2  audio元素     11

    Shane说:“Shankar撰写的这本书正是业界所需要的:关于如何有效并熟练地编写JavaScript(和Node.js)。这本书教你如何编写游戏,但它并不仅仅是一本关于游戏开发的书,还是一本教你如何编写高质量JavaScript代码的书。”
     
    Josh Robinson是一位专注于前沿技术的编程专家和自由开发者。他对编程的热爱最初来自一台二手的Commodore 64计算机屏幕上的蓝色荧光,后来他选择现代Web开发作为自己的职业。2006年,他供职于一家网络电话供应商之时,发现了Ruby和Ruby on Rails的优雅之处,并开发了若干个gem,其中包括流行的countries gem。你可以通过JoshRobinson.com或者Twitter: @JoshRobinson联系到他。

    1.3  image元素    14

    Josh Robinson说:“有了这本书,你就能像一个Boss一样写代码了。”
     
    Syd Lawrence经营并管理着We Make Awesome Sh,他是Twilio的开发者和传播者。他获得过很多赞誉。Geek.com曾经将他形容为现代的超级英雄,而The Next Web曾经说他是社交网络的领袖。

    1.3.1  图像加载   15

    前言

    1.3.2  子画面页(精灵图)        15

    欢迎阅读这本书。

    1.4  动画:计时器和游戏循环  17

    我多么希望在我自己开始学习游戏开发的时候,能有这样一本书。现在,我就写了这本书。

    1.4.1  requestAnimationFrame    18

    与那些充斥着你永远用不到的抽象例程的书不同,这本书将向你提供第一手的关于HTML5如何被用来创建完整的可玩的游戏的资料。

    1.5  小结       20

    我精心挑选了一款物理引擎游戏和一款即时战略游戏作为例子,这是因为,这两种类型的游戏中几乎包含了需要用来构建当下流行的各种类型游戏的所有的元素。

    第2章 创建基本的游戏世界     21

    如果你完整地阅读本书,你将学到所有用来创建HTML5游戏的关键元素,并了解如何将这些元素组合在一起来实现看上去很专业的游戏。

    2.1  基本HTML布局   21

    如果你读完了本书,我希望你能够拥有自信,也拥有资源去开始创作你自己的令人惊叹的HTML5游戏。

    2.2  创建启动画面和主菜单       22

    本书读者

    2.3  关卡选择       26

    本书面向的读者将是那些已经有一些HTML和JavaScript开发经验,并且想要学习如何开发令人惊叹的HTML5游戏,却不知从哪里入手的人。

    2.4  加载图像       29

    那些已经有一些其他语言(比如Flash)的游戏开发经验,并想尝试HTML5的读者也会从本书中找到很多有价值的信息。

    2.5  加载关卡       33

    如果你对自己的游戏开发技能还没什么自信,也不用着急。这本书包含了用来构建游戏的所有关键元素,便于你跟随本书的章节来逐步学习如何设计大型、专业的HTML5游戏。如果你不能跟上,这本书也会告诉你到哪里能够找到补习的资料。

    2.6  动画       34

    本书对HTML5基础、Box2D引擎、路径规划和导航、战斗系统和敌人AI,以及使用Node.js和WebSockets的多人对战模式,都用独立的章节进行介绍。所以,无论你编写程序的水平如何,都能从本书中有所收获。

    2.7  处理鼠标输入       37

    本书结构
    本书将利用12章的内容向你展示创建两款完整游戏的过程。
    前4章将创建游戏《水果战争》——一款基于Box2D物理引擎的游戏,它与游戏《愤怒的小鸟》极为类似。
    第1章将讨论用来实现游戏的HTML5基础,如在canvas元素上绘图并产生动画,播放音乐,使用子画面页。
    第2章将搭建一个基本的游戏框架,包括启动画面、主菜单、资源加载器和基于视差滚动的一个基本关卡。
    第3章将详细介绍Box2D物理引擎,并展示如何使用Box2D来模拟游戏世界中的物理规律。
    第4章将把游戏框架和Box2D引擎结合起来,添加音效和音乐,创建一个完整的可玩的物理类游戏。
    接着,本书将创建一款即时战略游戏,包括单人战役模式和多人对战模式。接下来的6章将讨论单人战役模式。
    第5章包含了建立基本游戏框架的内容,包括启动画面、主菜单、资源加载器和基于鼠标平移地图的基本关卡。
    第6章向游戏中添加了不同类型的单位,如车辆、飞行器、建筑。
    第7章使用路径规划算法和导航算法,展示如何使单位的移动更加智能。
    第8章向游戏中添加经济系统和一个触发器系统。触发器将帮助我们编写游戏剧情。
    第9章实现游戏的武器和战斗系统。
    第10章在已有的框架之上,展示如何创建数个具有挑战性的单人战役关卡,并最终完成游戏单人战役模式。
    最后两章将研究如何实现即时战略游戏的多人对战部分。
    第11章将讨论使用WebSocket API和Node.js的基本方法,并创建一个多人对战大厅。
    第12章将利用同步网络模型实现多人对战操作的框架,并在维持同步性的同时对网络延迟进行补偿。

    2.8  设置游戏阶段       39

    下载源码
    本书涉及的源代码可以在Apreess的Web站点(www.apreess.com)上下载。你可以在站点标题下方的Source Code/Downloads选项卡中找到本书信息页面的链接。

    2.9  小结       42

    联系作者

    第3章 物理引擎基础          43

    如果你有任何问题或反馈,可以通过作者个人站点中本书的专页www.adityaravishankar. com/pro-html5-games/与他联系。你也可以通过E-mail:[email protected] com联系他。

    3.1  Box2D基础   43

     目录
    第1章  HTML5与JavaScript概要  1
    1.1  canvas元素      2
    1.1.1  绘制矩形       3
    1.1.2  绘制复杂形状或路径   5
    1.1.3  绘制文本       7
    1.1.4  自定义画笔样式(颜色和纹理)         8
    1.1.5  绘制图像       9
    1.1.6  平移和旋转  10
    1.2  audio元素         11
    1.3  image元素       14
    1.3.1  图像加载       15
    1.3.2  子画面页(精灵图)   15
    1.4  动画:计时器和游戏循环       17
    1.4.1  requestAnimationFrame          18
    1.5  小结          20
    第2章  创建基本的游戏世界         21
    2.1  基本HTML布局       21
    2.2  创建启动画面和主菜单  22
    2.3  关卡选择           26
    2.4  加载图像           29
    2.5  加载关卡           33
    2.6  动画          34
    2.7  处理鼠标输入           37
    2.8  设置游戏阶段           39
    2.9  小结          42
    第3章  物理引擎基础   43
    3.1  Box2D基础       43
    3.1.1  引入Box2D   44
    3.1.2  定义World变量   45
    3.1.3  添加第一个物体:地面        46
    3.1.4  绘制世界:调试绘图模式   48
    3.1.5  动画      50
    3.2  更多的Box2D元素  52
    3.2.1  创建矩形物体       52
    3.2.2  创建圆形物体       54
    3.2.3  创建多边形物体  56
    3.2.4  创建多种形状的复杂物体   58
    3.2.5  连接物体的接合点        61
    3.3  追踪碰撞与破坏      64
    3.3.1  接触监听器  65
    3.4  绘制角色           68
    3.5  小结          71
    第4章  物理引擎集成   72
    4.1  定义物体           72
    4.2  添加Box2D       75
    4.3  创建物体           78
    4.4  向关卡加入物体      79
    4.5  设置Box2D调试绘图       82
    4.6  绘制物体           84
    4.7  Box2D动画       86
    4.8  加载英雄           88
    4.9  发射英雄           91
    4.10  结束关卡        94
    4.11  碰撞损坏        96
    4.12  绘制弹弓橡胶带    99
    4.13  切换关卡        101
    4.14  添加声音        103
    4.14.1  添加断裂和反弹的音效      104
    4.14.2  添加背景音乐     107
    4.15  小结        110
    第5章  创建即时战略游戏世界    111
    5.1  基本HTML布局       112
    5.2  创建启动画面和主菜单  112
    5.3  地图与关卡      118
    5.4  加载任务简介画面 120
    5.5  制作游戏界面           124
    5.6  实现地图平移           131
    5.7  小结          137
    第6章  加入单位   138
    6.1  定义单位           138
    6.2  第一个物体:主基地       139
    6.3  为关卡添加单位      143
    6.4  绘制单位           147
    6.5  添加星港           150
    6.6  添加炼油厂      154
    6.7  添加炮塔           157
    6.8  添加车辆           160
    6.9  添加飞行器      165
    6.10  添加地形        170
    6.11  选中游戏单位         175
    6.12  强调选中的单位    178
    6.13  小结        183
    第7章  单位智能移动   184
    7.1  命令单位           184
    7.2  发送和接收命令      186
    7.3  执行指令           188
    7.4  实现飞行器移动      189
    7.5  路径规划           195
    7.6  定义寻径格网           196
    7.7  实现车辆移动           203
    7.8  碰撞检测和导航      207
    7.9  将采油车展开为炼油厂  214
    7.10  流畅移动        215
    7.11  小结        219
    第8章  添加更多的游戏元素         220
    8.1  实现基本的经济系统       220
    8.1.1  设置启动资金       220
    8.1.2  实现侧边栏  223
    8.1.3  获取资金       225
    8.2  购买建筑和单位      226
    8.2.1  添加侧边栏按钮  226
    8.2.2  启用与禁用侧边栏按钮        229
    8.2.3  在星港建造车辆和飞行器   232
    8.2.4  从基地建造建筑  241
    8.3  结束关卡           249
    8.3.1  实现消息对话框  250
    8.3.2  实现触发器  254
    8.4  小结          259
    第9章  添加武器和战斗         261
    9.1  实现战斗系统           261
    9.1.1  添加炮弹       261
    9.1.2  炮塔的战斗指令  269
    9.1.3  飞行器的战斗指令        274
    9.1.4  车辆的战斗指令  279
    9.2  创建智能的敌人      284
    9.3  添加战争迷雾           287
    9.3.1  定义迷雾对象       287
    9.3.2  绘制迷雾       290
    9.3.3  禁止在迷雾上建造建筑        293
    9.4  小结          295
    第10章  完成单人战役           296
    10.1  添加音效        296
    10.1.1  创建音效    296
    10.1.2  命令确认音效     298
    10.1.3  消息提示音          301
    10.1.4  战斗音效    302
    10.2  创建单人战役         303
    10.2.1  救援    303
    10.2.2  袭击    312
    10.2.3  抵抗围攻    318
    10.3  小结        329
    第11章  WebSocket与多人对战模式   331
    11.1  使用Node.js操作WebSocket API 331
    11.1.1  浏览器端的WebSocket       331
    11.1.2  使用Node.js创建HTTP服务器  334
    11.1.3  创建WebSocket服务器      336
    11.2  创建多人对战游戏大厅          339
    11.2.1  定义多人对战大厅界面      339
    11.2.2  游戏房间列表     341
    新葡亰496net,11.2.3  进入和离开房间          345
    11.3  启动多人对战游戏         351
    11.3.1  定义多人对战关卡     351
    11.3.2  加载多人战役关卡     354
    11.4  小结        359
    第12章  多人对战游戏操作 360
    12.1  同步网络模型         360
    12.1.1  测量网络传输时间     361
    12.1.2  发送命令    365
    12.2  结束多人对战         370
    12.2.1  玩家被击败时结束游戏      370
    12.2.2  玩家断开连接时结束游戏           375
    12.2.3  玩家丢失连接时结束游戏           376
    12.3  实现玩家聊天         378
    12.4  小结        382
    索引           384

    3.1.1  引入Box2D         44

    著 谢光磊 译出版社:...

    3.1.2  定义World变量45

    3.1.3  添加第一个物体:地面   46

    3.1.4  绘制世界:调试绘图模式        48

    3.1.5  动画   50

    3.2  更多的Box2D元素       52

    3.2.1  创建矩形物体   52

    3.2.2  创建圆形物体   54

    3.2.3  创建多边形物体        56

    3.2.4  创建多种形状的复杂物体        58

    3.2.5  连接物体的接合点   61

    3.3  追踪碰撞与破坏  64

    3.3.1  接触监听器        65

    3.4  绘制角色       68

    3.5  小结       71

    第4章 物理引擎集成          72

    4.1  定义物体       72

    4.2  添加Box2D   75

    4.3  创建物体       78

    4.4  向关卡加入物体  79

    4.5  设置Box2D调试绘图  82

    4.6  绘制物体       84

    4.7  Box2D动画   86

    4.8  加载英雄       88

    4.9  发射英雄       91

    4.10  结束关卡     94

    4.11  碰撞损坏     96

    4.12  绘制弹弓橡胶带99

    4.13  切换关卡     101

    4.14  添加声音     103

    4.14.1  添加断裂和反弹的音效 104

    4.14.2  添加背景音乐 107

    4.15  小结     110

    第5章 创建即时战略游戏世界         111

    5.1  基本HTML布局   112

    5.2  创建启动画面和主菜单       112

    5.3  地图与关卡  118

    5.4  加载任务简介画面       120

    5.5  制作游戏界面       124

    5.6  实现地图平移       131

    5.7  小结       137

    第6章 加入单位          138

    6.1  定义单位       138

    6.2  第一个物体:主基地  139

    6.3  为关卡添加单位  143

    6.4  绘制单位       147

    6.5  添加星港       150

    6.6  添加炼油厂  154

    6.7  添加炮塔       157

    6.8  添加车辆       160

    6.9  添加飞行器  165

    6.10  添加地形     170

    6.11  选中游戏单位     175

    6.12  强调选中的单位178

    6.13  小结     183

    第7章 单位智能移动          184

    7.1  命令单位       184

    7.2  发送和接收命令  186

    7.3  执行指令       188

    7.4  实现飞行器移动  189

    7.5  路径规划       195

    7.6  定义寻径格网       196

    7.7  实现车辆移动       203

    7.8  碰撞检测和导航  207

    7.9  将采油车展开为炼油厂       214

    7.10  流畅移动     215

    7.11  小结     219

    第8章 添加更多的游戏元素     220

    8.1  实现基本的经济系统  220

    8.1.1  设置启动资金   220

    8.1.2  实现侧边栏        223

    8.1.3  获取资金   225

    8.2  购买建筑和单位  226

    8.2.1  添加侧边栏按钮        226

    8.2.2  启用与禁用侧边栏按钮   229

    8.2.3  在星港建造车辆和飞行器        232

    8.2.4  从基地建造建筑        241

    8.3  结束关卡       249

    8.3.1  实现消息对话框        250

    8.3.2  实现触发器        254

    8.4  小结       259

    第9章 添加武器和战斗     261

    9.1  实现战斗系统       261

    9.1.1  添加炮弹   261

    9.1.2  炮塔的战斗指令        269

    9.1.3  飞行器的战斗指令   274

    9.1.4  车辆的战斗指令        279

    9.2  创建智能的敌人  284

    9.3  添加战争迷雾       287

    9.3.1  定义迷雾对象   287

    9.3.2  绘制迷雾   290

    9.3.3  禁止在迷雾上建造建筑   293

    9.4  小结       295

    第10章 完成单人战役       296

    10.1  添加音效     296

    10.1.1  创建音效 296

    10.1.2  命令确认音效 298

    10.1.3  消息提示音      301

    10.1.4  战斗音效 302

    10.2  创建单人战役     303

    10.2.1  救援 303

    10.2.2  袭击 312

    10.2.3  抵抗围攻 318

    10.3  小结     329

    第11章 WebSocket与多人对战模式        331

    11.1  使用Node.js操作WebSocket API      331

    11.1.1  浏览器端的WebSocket   331

    11.1.2  使用Node.js创建HTTP服务器     334

    11.1.3  创建WebSocket服务器  336

    11.2  创建多人对战游戏大厅     339

    11.2.1  定义多人对战大厅界面 339

    11.2.2  游戏房间列表 341

    11.2.3  进入和离开房间      345

    11.3  启动多人对战游戏     351

    11.3.1  定义多人对战关卡 351

    11.3.2  加载多人战役关卡 354

    11.4  小结     359

    第12章 多人对战游戏操作       360

    12.1  同步网络模型     360

    12.1.1  测量网络传输时间 361

    12.1.2  发送命令 365

    12.2  结束多人对战     370

    12.2.1  玩家被击败时结束游戏 370

    12.2.2  玩家断开连接时结束游戏      375

    12.2.3  玩家丢失连接时结束游戏      376

    12.3  实现玩家聊天     378

    12.4  小结     382

    索引        384

    精彩节摘

    译者序

    香港回归那一年的某一天,我第一次在同学家的电脑上观摩了他玩《红色警戒95》这款游戏的过程。至今我依然记得,当时他操纵着一辆吉普车和几名步兵,在地图上探索。队伍所到之处,原先覆盖着的黑色迷雾就会散去,显现出其下的地形来。说实话,我被这个效果深深地震撼了。不久,父母为家里添置了一台电脑,我也如愿以偿地玩上了这款游戏。事实上,作为20世纪80年代末出生的一批人,电子游戏伴随我度过了几乎整个少年时代。

    一 款优秀的游戏就好像一部引人入胜的小说(如《仙剑奇侠传》《空之轨迹》),或者一部伟大的百科全书(如《文明》《三国志》),令人击节称赞。不同的是,电 子游戏带给玩家的沉浸感,比书籍带给读者的更加直接和浓烈。我无数次萌生出这样的念头:如果能制作出自己的游戏——制作游戏场景和背景音乐,设定角色与怪 物的外形和技能,建立战斗系统与剧情——那多好。所以,作为读者的你,应当可以想象出,当得知有机会翻译一本关于游戏编程的书籍之时,我该有多兴奋。

    这本书名为《HTML5游戏开发进阶指南》,顾名思义,讲的是如何开发HTML5游戏。HTML诞生之初仅仅是用来结构化文档信息,并创建可在浏览器上显示的网页。事实上,最初版本的HTML连图片都无法显示,页面仅由标题、文字段落和指向其他页面的链接组成。随着互联网的发展,HTML逐渐变成了今天的样子。我们在花花绿绿的网页上浏览新闻、观看视频、听音乐、购物、更新Facebook状态、与同事聊天,甚至玩游戏——今天的HTML,早已不是一页A4纸,而是能够与用户深度交互的平台。

    HTML5是最新的HTML标准,其诸多新特性中,最令人期待的一点莫过于新的标签<canvas>。开发者可以在<canvas>中几乎不受限制地绘图,就像在Windows下使用GDI函数一样;在部分浏览器中,开发者甚至可以在<canvas>中绘制三维场景,就像使用openGL一样。结合requestAnimationFrame或setTimeInterval,这个标签简直就是为游戏设计的。这本书主要介绍的就是如何使用<canvas>标签进行游戏开发。

    本书手把手地带领读者实现了两款HTML5游戏:前4章实现了一个类似于《愤怒地小鸟》的游戏。后8章 实现了一款简化版的《红色警戒》游戏。再简单的逻辑从零开始实现,都不是一件容易的事情,对于这两款游戏,虽然看上去简单,但绝不是随随便便就能够写出来 的。事实上,原作者力求这两款游戏臻于完善,并在书中详尽地阐述了游戏的细节:比如作者在绘制第一款游戏中的弹弓和橡胶带时,为了使橡胶带看上去很自然, 而将弹弓分为两部分;又如,作者在第二款游戏中,为了防止车辆在地图上移动时发生“阻塞”而进行的努力。

    对于熟悉前端开发,又想在前端有所作为的开发者,这是一本不可多得的好书。书中模块化的JavaScript代码,以及将琐碎的功能模块拼装成整体的方式,值得学习;本书介绍了很多游戏编程常用的技巧,如使用子画面页以优化性能,使用视差滚动以产生3D效果等。另外,还介绍了一些开源的游戏算法实现,如JavaScript版本的Box2D物理引擎、A*路径规划算法等。最后涉及使用Node.js构建多人战役的方法,如果你对服务器端的JavaScript感兴趣,你也应该来读一读这本书。

    总之,在读完本书之后,相信你一定知道如何着手去开发一款HTML5游戏。

     

    谢光磊

    作者简介

    Aditya Ravi Shankar是在1993年第一次接触计算机之后开始学习编程的。当时还没有互联网和在线教程,他在当地图书馆找到一本编程书籍,并通过艰苦地重写书中的代码,编写了他的第一个GW-BASIC游戏。

    2001年,他从印度理工学院毕业之后,做了近10年的软件顾问,为投资银行和大型企业开发交易与分析系统。最后,他离开了这个行业,这样他可以专注于从事自己所热爱的游戏开发。

    从此,作为一个自信的极客,他使用各种新的语言和技术来进行自己的项目和实验,包括HTML5。在这期间,他独立在HTML5平台上重建了著名的命令与征服RTS游戏,他也因此而著名。

    除了编程,Aditya还喜欢桌球、萨尔萨舞,以及学习发挥潜意识。他在其个人站点(www.adityaravishankar.com)中有一些关于游戏编程、个人发展和桌球的文章。

    当他不忙于写作,或者不用专注于自己的项目时,他也会做一些咨询工作,以帮助企业来使用新的软件产品。

     

    译者简介

    谢光磊,中科院某所硕士研究生在读。热爱生活,热爱Web前端开发,热爱WebGL技术。理想是成为一流的游戏设计师。个人站点:www.xieguanglei.com。

     

    技术审核者简介

    Shane Hudson是一位自由的Web站点开发者,专注于最前沿的Web技术和Web标准。他曾经参与过大量交互式Web站点的工作并辅助项目的开发,具有丰富的使用JavaScript的经验。他对人工智能和计算机视觉具有浓厚的兴趣,他的E-mail地址是shane@shanehudson.net。

    Shane说:“Shankar撰写的这本书正是业界所需要的:关于如何有效并熟练地编写JavaScript(和Node.js)。这本书教你如何编写游戏,但它并不仅仅是一本关于游戏开发的书,还是一本教你如何编写高质量JavaScript代码的书。”

     

    Josh Robinson是一位专注于前沿技术的编程专家和自由开发者。他对编程的热爱最初来自一台二手的Commodore 64计算机屏幕上的蓝色荧光,后来他选择现代Web开发作为自己的职业。2006年,他供职于一家网络电话供应商之时,发现了Ruby和Ruby on Rails的优雅之处,并开发了若干个gem,其中包括流行的countries gem。你可以通过JoshRobinson.com或者Twitter:@JoshRobinson联系到他。

    Josh Robinson说:“有了这本书,你就能像一个Boss一样写代码了。”

     

    Syd Lawrence经营并管理着We MakeAwesome Sh,他是Twilio的开发者和传播者。他获得过很多赞誉。Geek.com曾经将他形容为现代的超级英雄,而TheNext Web曾经说他是社交网络的领袖。

    前言

    欢迎阅读这本书。

    我多么希望在我自己开始学习游戏开发的时候,能有这样一本书。现在,我就写了这本书。

    与那些充斥着你永远用不到的抽象例程的书不同,这本书将向你提供第一手的关于HTML5如何被用来创建完整的可玩的游戏的资料。

    我精心挑选了一款物理引擎游戏和一款即时战略游戏作为例子,这是因为,这两种类型的游戏中几乎包含了需要用来构建当下流行的各种类型游戏的所有的元素。

    如果你完整地阅读本书,你将学到所有用来创建HTML5游戏的关键元素,并了解如何将这些元素组合在一起来实现看上去很专业的游戏。

    如果你读完了本书,我希望你能够拥有自信,也拥有资源去开始创作你自己的令人惊叹的HTML5游戏。

    本书读者

    本书面向的读者将是那些已经有一些HTML和JavaScript开发经验,并且想要学习如何开发令人惊叹的HTML5游戏,却不知从哪里入手的人。

    那些已经有一些其他语言(比如Flash)的游戏开发经验,并想尝试HTML5的读者也会从本书中找到很多有价值的信息。

    如果你对自己的游戏开发技能还没什么自信,也不用着急。这本书包含了用来构建游戏的所有关键元素,便于你跟随本书的章节来逐步学习如何设计大型、专业的HTML5游戏。如果你不能跟上,这本书也会告诉你到哪里能够找到补习的资料。

    本书对HTML5基础、Box2D引擎、路径规划和导航、战斗系统和敌人AI,以及使用Node.js和WebSockets的多人对战模式,都用独立的章节进行介绍。所以,无论你编写程序的水平如何,都能从本书中有所收获。

    本书结构

    本书将利用12章的内容向你展示创建两款完整游戏的过程。

    前4章将创建游戏《水果战争》——一款基于Box2D物理引擎的游戏,它与游戏《愤怒的小鸟》极为类似。

    第1章将讨论用来实现游戏的HTML5基础,如在canvas元素上绘图并产生动画,播放音乐,使用子画面页。

    第2章将搭建一个基本的游戏框架,包括启动画面、主菜单、资源加载器和基于视差滚动的一个基本关卡。

    第3章将详细介绍Box2D物理引擎,并展示如何使用Box2D来模拟游戏世界中的物理规律。

    第4章将把游戏框架和Box2D引擎结合起来,添加音效和音乐,创建一个完整的可玩的物理类游戏。

    接着,本书将创建一款即时战略游戏,包括单人战役模式和多人对战模式。接下来的6章将讨论单人战役模式。

    第5章包含了建立基本游戏框架的内容,包括启动画面、主菜单、资源加载器和基于鼠标平移地图的基本关卡。

    第6章向游戏中添加了不同类型的单位,如车辆、飞行器、建筑。

    第7章使用路径规划算法和导航算法,展示如何使单位的移动更加智能。

    第8章向游戏中添加经济系统和一个触发器系统。触发器将帮助我们编写游戏剧情。

    第9章实现游戏的武器和战斗系统。

    第10章在已有的框架之上,展示如何创建数个具有挑战性的单人战役关卡,并最终完成游戏单人战役模式。

    最后两章将研究如何实现即时战略游戏的多人对战部分。

    第11章将讨论使用WebSocket API和Node.js的基本方法,并创建一个多人对战大厅。

    第12章将利用同步网络模型实现多人对战操作的框架,并在维持同步性的同时对网络延迟进行补偿。

    下载源码

    本书涉及的源代码可以在Apreess的Web站点(www.apreess.com)上下载。你可以在站点标题下方的SourceCode/Downloads选项卡中找到本书信息页面的链接。

    联系作者

    如果你有任何问题或反馈,可以通过作者个人站点中本书的专页www.adityaravishankar. com/pro-html5-games/与他联系。你也可以通过E-mail:prohtml5games@adityaravishankar.com联系他。

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net:HTML5游戏开发进阶指南,快速开发

    关键词:

上一篇:多线程与多进程,进程和线程

下一篇:没有了