小游戏开发 Mario (9)

上两周主要给大家介绍了游戏中是如何检测游戏角色和游戏角色和障碍物间的碰撞。今天回到 mario 继续写我们 super mario 这款游戏。

在开始新的内容之前,我们需要整理一下前面的代码。我们看图中的 loadBackgroundSprites 和下面定义的 comp 对象都是应该属于 level(关卡),因为他们都会关卡息息相关。关卡包含背景图的组合(这里所谓组合将许多层组合为背景展示给用户)

创建 Level 类,Level 中我们将 compositor(图层组合)游戏角色集合 entities。

介绍一下 ES6提供了Set 数据结构。类似于数组,但是没有重复值。下面代码可以帮助大家理解 Set 数据结构。

回到主(main.js)函数,由于 comp 已经成为 Level 一个属性,我们就可以删除此行代码。

我们将与 Level 有关的代码移到 Level 类中来整合代码,已经类的概念,也就是面向对象编程的终极目标就是复用代码

在 loader.js 我们对 loadLevel 进行改动,改动力度很大,稍一说明。在读取 json 和加载背景 sprite。两个加载完成后,我们需要创建 Level 实例,这个实例提供 comp 和 entities 。我们现在就把 compositor 封装到 Level 类中了。然后把 Mario 看作 Level 的 entities 集合中的一个。

切换到 layer.js 文件中,进行一些调整,这里内容显然易见,就不做过多解释了。

修改main.js 中代码,如下图。

现在一切和调整代码之前一样,除了没有看到主角 mario,我们要看到 mario 就还需要一些工作,就是将 mario 添加到 entities 中。

我们把 mario 的 update 方法也移到 Level 这类中,这样看起来就更合理,因为所有角色的都在 entities 这个集合中,所以可以 level 的 update 方法代替 mario(做一个 entity)他自己方法。然后在 level 的 update 方法中,我们遍历 entities 然后调用每一个 entity 的 update 方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天我们的目标是让 Mario 动起来。根据所学的物理知识,知道随着时间变化物体的位置发生改变,那么这个物体运动起...
    zidea阅读 3,280评论 0 6
  • 3首先我们在上一次代码基础上进行整理,把 Vec2 类移到 math.js 类中 , 由于以后还需在 math.j...
    zidea阅读 3,701评论 0 1
  • 在开始新的内容之前,我们先优化一下上一次代码。我们看图中的代码 发现(1)加载图片和(2)加载关卡(level)是...
    zidea阅读 3,693评论 0 6
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,409评论 2 17
  • BP神经网络简介 信息的正向传播与误差的反向传播 梯度下降算法修正权值 收敛慢,冗余,过拟合 卷积神经网络 存在包...
    _不知年阅读 3,265评论 0 0

友情链接更多精彩内容