我正在用es6语法弄乱Phaser 3。在Phaser 3中,现在所有内容都由场景组成,您可以在其中加载/更新/等所有内容。因此,对于主要的Game
场景,我扩展了Phaser.Scene
。
export default class Game extends Phaser.Scene {
preload()
create()
...
但是,假设我有一个播放器,它将涉及100行代码,我希望将它们保存在一个单独的文件中以保持代码的清洁度。我该如何组织?
我发现的所有教程/信息都只是在同一文件中包含了场景的所有代码,但是对于完全充实的游戏来说,这显然是不现实的。我想将游戏的许多元素分为各自的类/文件。
所以,我只创建一个播放器类,没有扩展任何内容?还是应该将其扩展为Phaser.Sprite
之类的?
答案 0 :(得分:5)
我认为大多数教程将所有内容都放在一个文件中的原因是:
要回答您的特定问题“那么,我只是创建一个播放器类,什么都不会扩展?还是应该用Phaser.Sprite
之类的东西来扩展它?”,这取决于。
我正在使用TypeScript,所以我的结构和代码有些不同,但是我有a src directory structure like the following:
在ts / Scenes目录中,我抛出了所有场景,它们扩展了Phaser.Scene
。在ts / Prefabs目录中(prefabs是我几年前从a Phaser 2 tutorial获得的东西),我放置了所有自定义类。
看我现在正在玩的游戏,我有一个扩展了Phaser.GameObjects.Group
的游戏,有三个扩展了自定义对象的游戏,还有两个扩展了任何东西的游戏。过去,我还扩展了Phaser.Sprite
。
是否扩展Phaser.Sprite
的真正问题取决于您希望对象为您做些什么。
就我而言,我想创建一个基本的Character
类,我的Hero
和Monster
实例可以扩展,并且在创建精灵时会在游戏中创建它们。我之所以选择Group
是因为我使用的精灵由两部分组成,因此对于Group,我可以在创建对象时将两个Sprite
添加到其中,但是可以使用{ {1}}我只需要一项资产。
我的其他自定义对象之一只是存储有关游戏状态的信息,因此,由于游戏中没有任何内容需要显示,因此它Sprite
中不会扩展任何内容。
因此,您的问题是,在创建新的Phaser.GameObjects
时,是否要将其显示为具有附加功能/属性的Player
?如果是前者,请扩展Sprite
(或您需要的任何Sprite
。否则,则不需要。
答案 1 :(得分:0)
也许您可以尝试nkholski/phaser3-es6-webpack。
我目前正在以这种方式开发游戏。