Phaser 3 es6: Как создать класс Player? - PullRequest
0 голосов
/ 03 июля 2018

Я возиться с Phaser 3 в синтаксисе es6. В Phaser 3 все теперь состоит из сцен, где вы загружаете / обновляете / и т.д. Итак, для основной Game сцены я расширяю Phaser.Scene.

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

Но, скажем, у меня есть плеер, который будет включать в себя сотни строк кода, которые я хотел бы сохранить в отдельном файле для чистоты кода. Как мне это организовать?

Каждый учебник / информация, которую я нахожу об этом, просто включает весь код сцены в одном и том же файле, но это явно нереально для полностью проработанных игр. Я хочу разделить многие элементы игры на их соответствующие классы / файлы.

Итак, я просто создаю класс игрока, который ничего не расширяет? Или я должен расширить его на что-то вроде Phaser.Sprite?

Ответы [ 2 ]

0 голосов
/ 26 июля 2018

Может быть, вы можете попробовать nkholski / phaser3-es6-webpack .

Я сейчас занимаюсь разработкой игры таким образом.

0 голосов
/ 04 июля 2018

Я думаю, что причина, по которой большинство уроков бросают все в один файл, заключается в том, что:

  • они ориентированы на новичков, которые могут испытывать программирование впервые и поэтому могут запутаться, работая с несколькими исходными файлами
  • веселые игры в Phaser определенно можно создать в одном исходном файле
  • некоторые платформы хостинга игр хотят / предпочитают один файл JS

Чтобы ответить на ваш конкретный вопрос «Итак, я просто создаю класс игрока, который ничего не расширяет? Или я должен расширить его на что-то вроде Phaser.Sprite?», Это зависит.

Я работаю в TypeScript, поэтому моя структура и код немного отличаются, но у меня есть структура каталогов src, подобная следующей :

  • активы
  • ц
    • Prefabs
    • Сцена
    • Game.ts

В каталоге ts / Scenes я выбрасываю все свои сцены, которые расширяются Phaser.Scene. В каталоге ts / Prefabs (prefabs - это то, что я взял несколько лет назад из руководства по Phaser 2 ), я поместил любые пользовательские классы.

Глядя на игру, над которой я сейчас работаю, у меня есть одна, которая расширяет Phaser.GameObjects.Group, три, которые расширяются от этого пользовательского объекта, а затем пара, которая не расширяется ни от чего. В прошлом я также увеличил Phaser.Sprite.

Реальный вопрос о том, стоит ли расширять Phaser.Sprite или нет, зависит от того, что вы хотите, чтобы объект сделал для вас.

В моем случае я хотел создать базовый класс Character, который мог бы расширять мои экземпляры Hero и Monster и который создавал бы спрайты в игре при их создании. Я выбрал Group, потому что используемые мной спрайты состоят из двух частей, поэтому с помощью группы я мог бы добавить к ней оба Sprite при создании объекта, но мог бы пойти с Sprite, если бы я нужен только один актив.

Один из моих других пользовательских объектов просто хранит информацию о состоянии игры, поэтому, поскольку в игре нет ничего, что действительно нужно отображать в игре, оно ничего не расширяет в Phaser.GameObjects.

Итак, вопрос для вас: когда вы создаете новый Player, вы хотите, чтобы он отображался как Sprite с дополнительными функциями / свойствами, или нет? Если первое, продлите Sprite (или что-то еще Phaser.GamesObjects, в котором вы нуждаетесь. В противном случае не надо.

...