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,我的 Hero
和 Monster
实例可以扩展,这将在游戏中创建精灵我创造了它们。我选择了 Group
,因为我使用的精灵由两部分组成,所以对于一个组,我可以在创建对象时将两个 Sprite
添加到它,但可以使用 Sprite
如果我只需要一项资产。
我的其他自定义对象之一仅存储有关游戏状态的信息,因此由于在游戏中存在时实际上不需要显示任何内容,因此它不会在 Phaser.GameObjects
.[=28 中扩展任何内容=]
所以你的问题是,当你创建一个新的 Player
时,你是否希望它显示为 Sprite
和额外的 functionality/properties?如果是前者,请扩展 Sprite
(或您需要的任何 Phaser.GamesObjects
。否则不要。
也许你可以试试nkholski/phaser3-es6-webpack。
我目前正在以这种方式开发游戏。
我正在用 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,我的 Hero
和 Monster
实例可以扩展,这将在游戏中创建精灵我创造了它们。我选择了 Group
,因为我使用的精灵由两部分组成,所以对于一个组,我可以在创建对象时将两个 Sprite
添加到它,但可以使用 Sprite
如果我只需要一项资产。
我的其他自定义对象之一仅存储有关游戏状态的信息,因此由于在游戏中存在时实际上不需要显示任何内容,因此它不会在 Phaser.GameObjects
.[=28 中扩展任何内容=]
所以你的问题是,当你创建一个新的 Player
时,你是否希望它显示为 Sprite
和额外的 functionality/properties?如果是前者,请扩展 Sprite
(或您需要的任何 Phaser.GamesObjects
。否则不要。
也许你可以试试nkholski/phaser3-es6-webpack。
我目前正在以这种方式开发游戏。