回到物联网

已经有一段时间了,但是回来很高兴。

在过去的几周里,生活陷入困境,努力工作直至死亡,这使我无法继续前进。 不用担心,这一切都很好。 让我们看看我这次陷入了什么样的混乱。

首要的

链接。 它们始终是更新中最重要的部分。 事不宜迟,您可以在此处查看代码并尝试在此处玩游戏。 旁注:我需要给Vanilla和Flamingosis提供一些道具,以提供出色的音乐以配合编码。

好吧,有什么新消息吗?

还记得上一篇文章的承诺吗? “下周,我承诺在地图上至少出现一种敌人……”是的。 好吧,我很高兴地报告说,我所拥有的东西几乎不能达到目标!

是的 那是我的小敌人。 他上方有个健康酒吧,如果开枪打他会受伤。

但是要小心,因为他也可能伤害您。

我之前实现的组合块中也存在此奇怪的错误:

现在,它是这样工作的:

那么,这一切如何运作?

老实说,与以前的尝试相比,这些修复/功能的实现非常简单。 我正在这个框架上工作,我可以更多地依靠我已经知道的东西,而不必在本轮学习新的知识。

我要谈的第一件事是我在关于该游戏的第一篇文章中提到的东西:用局部代替世界引力。 我要做的就是删除先前在播放器和组合块上设置的局部重力,然后将其应用于整个游戏世界。

但是,这样做至少有一个意想不到的后果:

我完全忘记了世界引力将适用于整个世界。 虽然简单修复。 我所要做的就是将子画面的物理物体的allowGravity设置为false。

很容易,对吧?

敌人呢?

也容易。 还记得我是如何设置一用于块的,一用于子弹的吗? 好吧,我想我一次将要有多个敌人,所以我也为敌人设置了一个小组

当然,我必须创建一个函数来创建一个敌人,以便可以填充该

在这里,我的设置物理过程与创建播放器的功能完全相同,我将设置内置的health成员以及自定义的maxHealth和healthBar成员。 这样,我就可以将敌人对象关心的所有内容保留在该对象的实例中。

那不可能是全部。

你是对的。 我还必须实现碰撞和健康控制。 在开始之前,我想向您介绍Phaser提供的一种解决掉落块问题的方法。 该方法当然被称为overlay 。 它的名称和使用方法与我们使用collide方法的方法相同,但只检查比较的两个Sprite是否重叠(duh)。 基本上,我用它来查看子弹是否碰到了一个方块,而子弹没有对该方块施加任何物理作用。 看看这个例子:

在第一行中,我们正在检查下落块是否与地板块发生碰撞。 如果是这样,我们想应用物理学。 特别是,我们希望下落块能够识别地板块是不可移动的,并阻止下落块移动。

在第二行中,我们正在检查是否有任何子弹击中了方块,但我们根本不希望子弹对方块施加任何作用力。 对于这种情况, 重叠正是我们想要的。

好吧,但是回到那个敌人……

很好很好 您知道耐心是一种美德。 您应该对此进行努力。

无论如何,我需要先解释一下重叠法,因为它在处理敌人与玩家的互动时非常有用。

在这里,我们可以看到调用collide方法以确保敌人不会掉落到地板上,并且可以调用重叠来处理当敌人被子弹击中以及玩家触摸敌人时发生的情况。

首先,让我们看看当子弹击中敌人时会发生什么:

大多数应该是完全合理的。 用其杀死方法摆脱子弹,降低敌人的生命值 ,并在敌人死亡时摆脱它。 这里唯一棘手的事情是缩小健康栏的大小。 为此,我调用了敌人的healthBar成员的scale.setTo方法。 我提供的宽度值是通过将我应用的初始比例因子(2)除以敌人的maxHealth来创建的,以得到每个健康增量的大小全部乘以剩余的健康量。

播放器/敌人重叠处理程序向我介绍了我将要介绍的Phaser框架中的最新功能。 该功能是重复事件 。 让我们检查一下然后讨论。

就像处理子弹击中敌人的功能一样,我正在减少玩家的生命值并扩大其生命线。 但是,我正在创建一个事件 ,我想重复设定的次数。 我提供的参数是(按顺序):从现在开始我希望事件开始的时间,我想重复事件多少次,每次事件发生时应该发生什么,以及要执行的上下文内的事件。

用简单的英语我说:

  • 我想调用我的自定义flashPlayer函数6次
  • 我希望它在1/6秒内开始
  • 我希望flashPlayer在此状态的上下文中执行,以便可以访问播放器对象

在将事件设置为运动之后,我想将玩家推离敌人​​,以便根据需要操纵玩家的xy速度值。

全做完了?

是的 就是这个帖子。 由于日程安排的忙碌性质似乎不会很快放慢,因此我将正式将预定发布日期从每周更改为每两周一次。 此外,我还没有决定要实现的下一个功能。 我正在考虑建立健康恢复并增加敌人的行动,但我还有很多其他想法。 我还发现了至少一个新的壁球虫,所以……我想我们会看到的!