【问题标题】:Phaser 3 es6: How to create a Player class?Phaser 3 es6:如何创建 Player 类?
【发布时间】:2018-12-12 00:10:00
【问题描述】:

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

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

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

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

所以,我只是创建了一个播放器类,它不扩展任何东西?或者我应该用Phaser.Sprite 之类的东西来扩展它?

【问题讨论】:

  • 如果您只想将代码放在单独的文件中,则根本不需要创建class。只需编写一个普通函数即可。

标签: javascript phaser-framework


【解决方案1】:

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

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

要回答您的具体问题“所以,我只是创建了一个不扩展任何内容的播放器类?还是应该通过 Phaser.Sprite 之类的方式扩展它?”,这取决于。

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

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

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

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

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

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

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

所以问题是,当您创建一个新的Player 时,您是否希望它显示为具有附加功能/属性的Sprite?如果是前者,请扩展Sprite(或您需要的任何Phaser.GamesObjects。否则不要。

【讨论】:

  • 谢谢,这是非常有用的信息。除了示例之外,很难找到有关 Phaser 3 的有用信息。但是这些信息将帮助我为我的游戏设置结构!
  • 乐于助人。祝您在 Phaser 中的项目好运! :)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多