Phaser 3 es6:如何创建播放器 class?

Phaser 3 es6: How to create a Player class?

我正在用 es6 语法摆弄 Phaser 3。在 Phaser 3 中,一切现在都由场景组成,您可以在其中 load/update/etc 一切。因此,对于主要 Game 场景,我扩展了 Phaser.Scene.

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

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

我发现的每个 tutorial/info 都只是将场景的所有代码都包含在同一个文件中,但这对于完全充实的游戏来说显然是不现实的。我想将游戏的许多元素分成各自的classes/files。

所以,我只是创建了一个播放器 class,它没有扩展任何内容?或者我应该通过 Phaser.Sprite 之类的方式扩展它吗?

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

  • 它们面向初学者,他们可能是第一次体验编程,因此可能会对使用多个源文件感到困惑
  • 完全可以在一个源文件中创建 Phaser 中的有趣游戏
  • 一些游戏托管平台want/prefer单个JS文件

要回答您的具体问题 "So, I just create a player class, that doesn't extend anything? Or should I extend it by something like Phaser.Sprite?",视情况而定。

我在 TypeScript 工作,所以我的结构和代码有点不同,但我有 a src directory structure like the following:

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

在 ts/Scenes 目录中,我将扩展 Phaser.Scene 的所有场景都扔掉了。在 ts/Prefabs 目录中(prefabs 是我多年前从 a Phaser 2 tutorial 中挑选的东西)我放了任何自定义的 classes.

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

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

在我的例子中,我想创建一个基本的 Character class,我的 HeroMonster 实例可以扩展,这将在游戏中创建精灵我创造了它们。我选择了 Group,因为我使用的精灵由两部分组成,所以对于一个组,我可以在创建对象时将两个 Sprite 添加到它,但可以使用 Sprite 如果我只需要一项资产。

我的其他自定义对象之一仅存储有关游戏状态的信息,因此由于在游戏中存在时实际上不需要显示任何内容,因此它不会在 Phaser.GameObjects.[=28 中扩展任何内容=]

所以你的问题是,当你创建一个新的 Player 时,你是否希望它显示为 Sprite 和额外的 functionality/properties?如果是前者,请扩展 Sprite(或您需要的任何 Phaser.GamesObjects。否则不要。

也许你可以试试nkholski/phaser3-es6-webpack

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