从头开始学习制作游戏

几天前,我有机会成为团队的一员,在孟买黑客马拉松比赛中有所作为。 在所有更世俗的项目中,我们决定开发一款游戏。 我对游戏的构建一无所知,而显而易见的是,您必须比平时的条件多得多。 甚至有很多简单的游戏都可以加入。对于我来说,开始很令人生畏。 一个基于Web的小游戏,除了JS外别无其他; 我们将看到我们能想到的。

幸运的是,我们的队友已经进行了一些实验,并且我们能够掌握基本知识。 有了canvas元素,一切都将与操纵图形有关。 受RPG的启发,我们选择了一款基于2D地图的游戏,并从opengameart.com上获取了一些精灵,然后开始努力将它们分开:

淘汰通用的Sprite加载程序以将它们实际与canvas元素一起使用是我们可以做的第一件事。 将有一个SpriteLoader对象,该对象将执行底层工作,即加载所有图像文件并在canvas元素上绘制它们(或其中的一部分)。 对于您可以想到的每个游戏元素,子画面都是详尽无遗的。 可以以多种方式在空间和时间上渲染这些地图。 充分利用它们的潜力是遥不可及的,但就目前而言,我们可以坚持我们所需要的。

这个想法是这样的,除了实用程序对象之外,每个游戏元素也将是一个单独的对象,具有其自身的状态,该状态具有其精灵,当前位置和动作。 主游戏循环将根据所有对象的当前状态反复绘制一个框架。 例如,具有固定位置和动作的“战士”对象就产生了这样的结果。

现在最令人兴奋的部分是:互动。 为了用不同的键移动他,我们可以定义相应的按键处理程序来更改其位置和精灵。

有了这个简单的主意,它就从酷到震撼到了大约5分钟。

在较大区域上渲染的地图具有2D数组以定义其精灵。 我们首先随机地用较大的对象填充数组,然后用单个单位的草精灵填充剩余的空间。

有了这些元素之后,我们可以使用它们添加更多环境元素:

该项目最好的部分可能是建筑。 总体而言,它有助于遵循“对象知道并执行的操作”的思维方式。 而且,它使得剥离样板并专注于机械原理变得异常容易。 以及在旅途中做出决策的黑客马拉松精神; 让我们偷工减料,让事情迅速运转。

从头开始构建的东西令人印象深刻。 而这仅仅是开始。 首先,socket.io让我们以实时多人游戏模式启动并运行,仅需几行就可以更接近BrowserQuest:

更多的互动,战斗,任务和逼真的地图都还没有出现,我们不再迷失于如何实现它们。