Phaser 3 ES6:如何创建Player类?

时间:2018-07-03 15:49:40

标签: javascript phaser-framework

我正在用es6语法弄乱Phaser 3。在Phaser 3中,现在所有内容都由场景组成,您可以在其中加载/更新/等所有内容。因此,对于主要的Game场景,我扩展了Phaser.Scene

export default class Game extends Phaser.Scene {
  preload()
  create()
  ...

但是,假设我有一个播放器,它将涉及100行代码,我希望将它们保存在一个单独的文件中以保持代码的清洁度。我该如何组织?

我发现的所有教程/信息都只是在同一文件中包含了场景的所有代码,但是对于完全充实的游戏来说,这显然是不现实的。我想将游戏的许多元素分为各自的类/文件。

所以,我只创建一个播放器类,没有扩展任何内容?还是应该将其扩展为Phaser.Sprite之类的?

2 个答案:

答案 0 :(得分:5)

我认为大多数教程将所有内容都放在一个文件中的原因是:

  • 他们是针对初学者的,他们可能是初学者,因此可能会因为使用多个源文件而感到困惑
  • Phaser中的趣味游戏绝对可以在一个源文件中创建
  • 某些游戏托管平台希望/更喜欢单个JS文件

要回答您的特定问题“那么,我只是创建一个播放器类,什么都不会扩展?还是应该用Phaser.Sprite之类的东西来扩展它?”,这取决于。

我正在使用TypeScript,所以我的结构和代码有些不同,但是我有a src directory structure like the following

  • 资产
  • ts
    • 预制件
    • 场景
    • Game.ts

在ts / Scenes目录中,我抛出了所有场景,它们扩展了Phaser.Scene。在ts / Prefabs目录中(prefabs是我几年前从a Phaser 2 tutorial获得的东西),我放置了所有自定义类。

看我现在正在玩的游戏,我有一个扩展了Phaser.GameObjects.Group的游戏,有三个扩展了自定义对象的游戏,还有两个扩展了任何东西的游戏。过去,我还扩展了Phaser.Sprite

是否扩展Phaser.Sprite的真正问题取决于您希望对象为您做些什么。

就我而言,我想创建一个基本的Character类,我的HeroMonster实例可以扩展,并且在创建精灵时会在游戏中创建它们。我之所以选择Group是因为我使用的精灵由两部分组成,因此对于Group,我可以在创建对象时将两个Sprite添加到其中,但是可以使用{ {1}}我只需要一项资产。

我的其他自定义对象之一只是存储有关游戏状态的信息,因此,由于游戏中没有任何内容需要显示,因此它Sprite中不会扩展任何内容。

因此,您的问题是,在创建新的Phaser.GameObjects时,是否要将其显示为具有附加功能/属性的Player?如果是前者,请扩展Sprite(或您需要的任何Sprite。否则,则不需要。

答案 1 :(得分:0)

也许您可以尝试nkholski/phaser3-es6-webpack

我目前正在以这种方式开发游戏。