Phaser 3 es6:如何创建一个玩家类?

8

我正在使用es6语法玩Phaser 3。在Phaser 3中,所有的东西现在都由场景(Scenes)组成,你可以在场景中加载/更新/等等。所以,对于主要的游戏场景,我扩展了Phaser.Scene

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

但是假设我有一个玩家,它涉及数百行代码,我希望将其保存在单独的文件中以保持代码的整洁。我该如何组织这些代码?
我找到的每个教程/信息都只包括场景的所有代码,但这对于完全成型的游戏显然不现实。我想将游戏的许多元素分离到它们各自的类/文件中。
所以,我只需创建一个玩家类,不扩展任何内容吗?还是应该通过像Phaser.Sprite这样的方式来扩展它?

如果只是想把代码放在一个独立的文件中,根本不需要创建一个“class”。直接编写一个普通函数即可。 - Bergi
2个回答

9

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

  • 它们面向初学者,可能是第一次接触编程,因此可能会因为使用多个源文件而感到困惑
  • 在Phaser中可以通过一个源文件创建有趣的游戏
  • 一些游戏托管平台希望/更喜欢单个JS文件

针对你的具体问题"那么,我只需要创建一个玩家类,不需要继承任何东西吗?或者应该像Phaser.Sprite这样扩展它?",答案取决于情况。

我正在使用TypeScript,因此我的结构和代码略有不同,但我有类似以下目录结构的src

  • assets
  • ts
    • Prefabs
    • Scenes
    • Game.ts
在ts/Scenes目录中,我放置了所有扩展了Phaser.Scene的场景。在ts/Prefabs目录中(prefabs是我几年前从a Phaser 2 tutorial学到的),我放置任何自定义类。
看着我现在正在开发的游戏,我有一个扩展了Phaser.GameObjects.Group的对象,还有三个继承自该自定义对象的对象,然后还有一些不继承任何东西的对象。过去我也曾扩展过Phaser.Sprite
真正的问题是是否要扩展Phaser.Sprite,这取决于你希望对象为你做什么。
在我的情况下,我想创建一个基本的“Character”类,让我的“Hero”和“Monster”实例可以继承,并在创建它们时在游戏中创建精灵。我选择了一个“Group”,因为我使用的精灵由两个部分组成,所以用一个Group,当我创建对象时,我可以将两个“Sprite”都添加到其中,但如果我只需要一个资源,我也可以使用一个“Sprite”。
我的另一个自定义对象只是存储有关游戏状态的信息,因此,由于存在时实际上没有任何需要在游戏中显示的内容,因此它不会扩展“Phaser.GameObjects”中的任何内容。
所以问题是,当您创建一个新的“Player”时,您是否希望它作为一个“Sprite”显示,并具有其他功能/属性?如果是前者,请扩展“Sprite”(或您需要的任何“Phaser.GamesObjects”)。否则不要扩展。

1
谢谢,这些信息非常有帮助。除了示例外,很难找到有用的Phaser 3信息。但这些信息将帮助我为我的游戏建立结构! - Gage Hendy Ya Boy
很高兴能够帮助。祝你在Phaser项目中好运! :) - James Skemp

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接