Я думаю, что причина, по которой большинство уроков бросают все в один файл, заключается в том, что:
- они ориентированы на новичков, которые могут испытывать программирование впервые и поэтому могут запутаться, работая с несколькими исходными файлами
- веселые игры в Phaser определенно можно создать в одном исходном файле
- некоторые платформы хостинга игр хотят / предпочитают один файл JS
Чтобы ответить на ваш конкретный вопрос «Итак, я просто создаю класс игрока, который ничего не расширяет? Или я должен расширить его на что-то вроде Phaser.Sprite
?», Это зависит.
Я работаю в TypeScript, поэтому моя структура и код немного отличаются, но у меня есть структура каталогов src, подобная следующей :
В каталоге 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
, в котором вы нуждаетесь. В противном случае не надо.