繁体   English   中英

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

[英]Phaser 3 es6: How to create a Player class?

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

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

但是,假设我有一个播放器,它将涉及100行代码,我希望将其保存在单独的文件中以保证代码清洁。 我该如何组织?

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

那么,我只是创建了一个不扩展任何内容的播放器类? 或者我应该像Phaser.Sprite那样扩展它?

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

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

回答你的具体问题“那么,我只是创建一个不扩展任何内容的播放器类?或者我应该通过像Phaser.Sprite这样的扩展来扩展它?”,这取决于它。

我在使用TypeScript,所以我的结构和代码有点不同,但我有一个像以下那样的src目录结构

  • 资产
  • TS
    • 组合屋
    • 场景
    • Game.ts

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

看看我现在正在处理的游戏,我有一个扩展Phaser.GameObjects.Group ,其中三个扩展了该自定义对象,然后是一对不扩展任何东西的游戏。 在过去,我也延伸了Phaser.Sprite

是否延伸Phaser.Sprite的真正问题是基于您希望对象为您做什么。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM