Skip to content
vasili.kostin edited this page Aug 27, 2021 · 29 revisions

Основные игровые функции и свойства (модуль game)

game - главный модуль игрового движка. Этот модуль является глобальным объектом, который существует только в одном экземпляре.

game отвечает за инициализацию игры, загрузку стартовой сцены, переходы между сценами, отображение модальных объектов, размеры сцены. Дополнительно в game включены несколько модулей, для того чтобы их методы и свойства были доступны для вызова из callback редактора и data-path редактора, для привязки к редактируемым событиям и свойствам компонентов.

Перед использованием модуля game в коде javascript необходимо импортировать его следующим образом:

import game from "thing-editor/js/engine/game.js";

В callback редакторе данный модуль доступен по пути 'game'


Свойства:

currentScene : Scene

Возвращает текущую, отображаемую на игровом экране сцену.


currentContainer : DisplayObject

Возвращает самый верхний модальный объект на экране, либо текущую сцену, если ни одного модального объекта в данный момент не отображается.


currentFader : DisplayObject

Возвращает текущий фейдер, перекрывающий сцену, если он присутствует в данный момент на экране. обычно, game.currentFader доступен в методе init или onShow, сцены, в момент ее появления на экране. game.currentFader можно использовать в качестве владельца для SceneLinkedPromise объектов, при этом фейдер не будет убран с экрана до тех пор, пока все прилинкованные к нему SceneLinkedPromise объекты не будут разрешены.


modalsCount : Number

Количество модальных объектов, отображаемых в данный момент. Свойство доступно только для чтения.


stage : Container

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


projectDesc : Object

javascript объект с настройками проекта.


time : Number

Глобальный счетчик игровых кадров. Возвращает количество игровых кадров прошедших с момента запуска игры.


fullscreen

В данном подмодуле собраны методы и свойства, отвечающие за переход игры в полноэкранный режим:

  • fullscreen.open() - вызов этого метода переводит игру в полноэкранный режим. Переход в полноэкранный режим сработает, только при вызове данного метода из onClick события компонента Button, либо из mousedown, pointerdown, touchstart событий javascript. Некоторые браузеры не поддерживают полноэкранный режим, либо полноэкранный режим может оказаться заблокирован настройками iframe. Thing-Engine поддерживает автоматический переход в полноэкранный режим, при любом клике по игровому экрану. Подробнее - настройки проекта:autoFullscreenDesktop, autoFullscreenMobile

  • fullscreen.close() - выход из полноэкранного режима.

  • fullscreen.toggle() - вход/выход в/из полноэкранного режима.

  • fullscreen.isFullscreen : Boolean - свойство принимает значение true, если игра находится в полноэкранном режиме в данный момент.

  • fullscreen.isAvailable : Boolean - свойство принимает значение true, если переход в полноэкранный режим поддерживается браузером игрока.


mouse

В данном подмодуле собраны свойства, представляющие текущее положение и состояние курсора игрока:

  • mouse.click : Boolean - свойство принимает значение true, если левая кнопка нажата в данный момент игроком, либо палец игрока касается экрана, если игра запущена на мобильном устройстве.
  • mouse.x : Number - положение курсора игрока по оси х относительно контейнера game.stage. Значение ограничено текущей шириной игрового экрана.
  • mouse.y : Number - положение курсора игрока по оси y относительно контейнера game.stage. Значение ограничено текущей высотой игрового экрана.

keys

В данном подмодуле собраны методы и свойства, отвечающие за игровой ввод (текущее состояние кнопок клавиатуры):

  • keys.left : Boolean - свойство принимает значение true, если в данный момент нажата стрелка влево, или клавиша 'A';
  • keys.right : Boolean - свойство принимает значение true, если в данный момент нажата стрелка вправо, или клавиша 'D';
  • keys.up : Boolean - свойство принимает значение true, если в данный момент нажата стрелка вверх, или клавиша 'W';
  • keys.down : Boolean - свойство принимает значение true, если в данный момент нажата стрелка вниз, или клавиша 'S';

Свойства left, up, right, bottom могут управляться без клавиатуры, экранным компонентом MobileJoystick, если его свойство isKeysController включено.

  • keys.shiftKey : Boolean - свойство принимает значение true, если кнопка Shift в данный момент нажата;
  • keys.altKey : Boolean - свойство принимает значение true, если кнопка Alt в данный момент нажата;
  • keys.ctrlKey : Boolean - свойство принимает значение true, если кнопка Ctrl в данный момент нажата;
  • keys.all : Object - данный объект содержит состояние всех кнопок клавиатуры по коду кнопки в качестве ключа;
  • keys.isKeycodePressed(keyCode : Number) : Boolean - метод возвращает значение true, если клавиша с заданным кодом в данный момент нажата; isKeycodePressed(keyCode)
if(game.keys.isKeycodePressed(28)) { // 28 - код клавиши Esc
	console.log("Esc нажат");
}
  • keys.resetAll() - сброс состояния всех кнопок в false. Данный метод вызывается автоматически при потере игрой фокуса.

В большинстве случаев, для захвата нажатий кнопок клавиатуры удобнее использовать свойство hotkey компонента Button.


settings

В данном подмодуле собраны методы, отвечающие за хранение игровых настроек и данных. Данные хранятся в localStorage, при этом в качестве ключа берется идентификатор игры из настроек проекта. В игровом редакторе к ключу проекта добавляется префикс 'editor.', чтобы изолировать настройки игры в редакторе от настроек игры в релизном билде.

  • settings.setItem(name : String, value : any) - сохраняет значение value под именем name. Вызовы данного метода автоматически группируются, и сохранение данных в хранилище происходит партиями, в целях оптимизации доступа к хранилищу;
  • settings.getItem(name : String, defaultValue : any) - извлекает сохраненное ранее значение name, в случае, если значение с данным именем отсутствует в хранилище, будет возвращено значение defaultValue;
  • settings.removeItem(name : String) - удаляет сохраненное ранее значение name из хранилища;

Часто, источником ошибок при сохранении и восстановлении данных в хранилище game.settings является сохранение в качестве значения не примитивного типа, а объекта, и последующая модификация полей такого объекта. Делов том, что в хранилище сохраняется прямая ссылка на объект и любые последующие модификации полей этого объекта будут влиять на данные, находящиеся в хранилище. Для избежания подобного рода ошибок, используйте метод deepClone, который создает копию объекта:

import {deepClone} from "thing-editor/js/engine/utils/utils.js";

game.settings.setItem('itemName', deepClone(objectItem));

Settings.globalOnChanged

Статический глобальный обработчик изменений настроек. Данный метод введен для добавления трекинга действий игрока.

Settings.globalOnChanged = (name, value) => {
	console.log('Event trace: settings changed, ' + name + '; ' + value);
};

gameId : String

Хранит уникальный идентификатор игры, заданный при вызове метода init. Используется Thing-Engine как ключ для хранения данных в подмодуле settings.


Sound

Подмодуль для работы со звуком. Подробное описание методов и свойств: Sound


L

Подмодуль локализации. Подробное описание методов и свойств: Модуль локализации


isMobile

Данный подмодуль содержит информацию о типе устройства, на котором запущена игра. Подробнее: библиотека isMobile


isPortrait : Boolean

Имеет значение true, пока игровой экран находится в портретном режиме.


isFocused : Boolean

Имеет значение true, пока страница игры активна. При сворачивании или уходе игрока со страницы, данное свойство принимает значение false.


_isCanvasRotated : Boolean

Имеет значение true, если контейнер game.stage повернут на мобильном устройстве, по причине того, что (настройка ориентации проекта не совпадает с текущей ориентацией мобильного экрана).


W : Number

Текущая ширина игрового экрана в пикселях.


H : Number

Текущая высота игрового экрана в пикселях.


pixiApp

Объект new PIXI.Application создаваемый для игры.


isCanvasMode : Boolean

Имеет значение true, если игра запустилась без аппаратного ускорения в canvas режиме.


isUpdateBeforeRender : Boolean

Обработка логики в игре происходит с фиксированной частотой, однако, отрисовка сцены на экран может происходить реже, на устройствах со слабым графическим процессором. Это обеспечивается вызовом обработчика игровой логики более чем один раз за кадр. Обращение к флагу isUpdateBeforeRender имеет с смысл только внутри метода update игрового компонента. Значение этого флага будет иметь значение true в том случае, если после текущего вызова update будет вызвана отрисовка игровой сцены, а не следующий update.


FPS : Number

Значение текущего FPS с которым работает игра. Данное свойство отсутствует в релизном билде.


__EDITOR_mode : Boolean

Свойство имеет значение true, когда игра в редакторе остановлена, и находится в состоянии редактирования сцены. При запуске игры данная переменная принимает значение false.

Данное свойство существует только при разработке игры в редакторе, и из финального билда удаляется, поэтому, обращение к нему из javascript следует оборачивать в теги теги условной компиляции '/// #if EDITOR', '/// #endif'. Javascript код, заключенный в такие теги будет вырезан при сборке игры. Подробнее о тегах условной компиляции.

/// #if EDITOR
function myFunction() {
	if(game.__EDITOR_mode) {
		console.log("Игра находится в режиме редактирования сцены.");
		return;
	}

	/// #endif
	console.log("Игра находится в режиме исполнения, либо запущена вне редактора (релизный билд).");
}

Методы:

init ( element : DOMElement = null, gameId : String = null, resourcesPath : String = '' )

Инициализация игры. element - DOM элемент HTML страницы, в котором будет создан игровой экран. Если данный параметр оставить пустым, то игровой экран будет создан в корне документа document.body.

То, каким образом игровой экран впишется в страницу зависит от настроек проекта. Подробнее настройки размеров игрового экрана

gameId - параметр позволяет переопределить уникальный идентификатор игры, который используется как ключ для хранения данных и настроек игры в localStorage. (Подробнее: game.settings). Если оставить этот параметр пустым, то будет использован id из настроек проекта.

resourcesPath - URL папки из которой будут браться файлы ресурсов игры. По умолчанию, ресурсы игры складываются в корневую папку билда игры, и не требуют указания пути к ним. Укажите данный параметр, в случае, если вы используете CDN или храните ресурсы в другой папке.


showScene (sceneName: String, faderType : String = 'fader/default')

Переход игрока в сцену с именем sceneName. При этом текущая сцена помещается в стек сцен, для того чтобы игрок вернулся в нее после закрытия той сцены, в которую он переходит.

faderType - определяет эффект перехода (фейдер) между текущей и открываемой сценами.


replaceScene (sceneName: String, faderType : String = 'fader/default')

Переход игрока в сцену с именем sceneName. При этом текущая сцена удаляется, и не помещается в стек сцен.

faderType - определяет эффект перехода (фейдер) между текущей и открываемой сценами.


closeCurrentScene (faderType : String = 'fader/default')

Закрывает и удаляет текущую сцену, при этом игрок перейдет в сцену взятую с вершины стека сцен. Если же в стеке сцен не окажется ни одной сцены (игрок находился в стартовой сцене, например, главном меню), будет выброшена ошибка .

faderType - определяет эффект перехода (фейдер) между сценами.


closeAllScenes (faderType : String = 'fader/default')

Закрывает текущую сцену и все сцены в стеке сцен, кроме стартовой. Игрок выходит в стартовую сцену.

faderType - определяет эффект перехода (фейдер) между сценами.


showModal (displayObject : String | DisplayObject, callback : Function)

Возвращаемый тип: DisplayObject Отображает модальный объект. Параметр displayObject может являться именем префаба, который будет загружен для отображения на экран, либо непосредственно готовым экранным объектом.

Параметр callback позволяет задать функцию, которая будет вызвана в момент скрытия отображенного модального объекта.

Метод возвращает отображенный модальный объект.


hideModal (displayObject : DisplayObject = null)

Скрывает и удаляет модальный объект. Если параметр displayObject указан, то именно этот модальный объект будет удален, иначе - скрывается самый верхний из модальных объектов.


showQuestion (title : String, message : String, yesLabel : String = null, onYes : Function = null, noLabel = null, onNo = null, easyClose = true, prefab = 'ui/sure-question')

Возвращаемый тип: DisplayObject Отображает текстовый модальный диалог, который может быть использован в качестве сообщения или вопроса игроку. Внешний вид определяется префабом, указанном в параметре префаб.

title - текст заголовка диалога. message - основной текст сообщения. yesLabel - текст или ключ для мультиязычного текста, который будет отображен на кнопке 'ОК'. Если оставить данный параметр пустым, то кнопка 'OK' будет содержать текст, заданный ей в префабе. onYes - функция, которая будет вызвана при нажатии игроком кнопки 'OK'. noLabel - текст или ключ для мультиязычного текста, который будет отображен на кнопке 'CANCEL'. Если оставить данный параметр пустым, то кнопка 'CANCEL' будет содержать текст, заданный ей в префабе. onYes - функция, которая будет вызвана при нажатии игроком кнопки 'CANCEL'.

Если параметры noLabel и onYes пустые, то кнопка 'CANCEL' будет скрыта, а кнопка 'OK' будет отцентрирована

easyClose - включает или отключает возможность закрытия диалога кликом за его пределами. prefab - имя префаба, который будет определять внешний вид диалога.


openUrl (url : String, target = '_blank')

Открывает страницу url. Параметр target определяет будет ли страница открыта в новом или текущем окне. Подробнее о target;

Открытие страницы в новом окне сработает, только при вызове данного метода из onClick события компонента Button, либо из mousedown, pointerdown, touchstart событий javascript. Иначе, новое окно может быть заблокировано браузером пользователя.


faderShoot ()

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


faderEnd ()

Данный метод вызывается из фейдера, и является сигналом о том, что фейдер завершил работу. При вызове этого метода происходит удаление фейдера с экрана. Подробнее про создание фейдеров.


getLoadingCount ()

Возвращаемый тип: Number Возвращает количество ресурсов загружаемых в данный момент. 0 - означает что загрузка всех ресурсов завершена, либо загрузка ресурсов не требуется.


mouseEventToGlobalXY(mouseEvent : MouseEvent)

Возвращаемый тип: PIXI.Point Преобразует javascript MouseEvent в точку, содержащую глобальные PIXI координаты.


forAllChildrenEverywhere (callback : Function)

Вызывает callback функцию для всех существующих экранных объектов, расположенных на контейнере game.stage, для сцен находящихся в стеке сцен, и статических сцен, для которых уже создан экземпляр сцены.


__showDebugError (text : String, errorCode = 90000)

Отладочный метод для отображения ошибок. В случае, если игра запущена в редакторе, ошибка будет отображена в окне статуса, в отладочном билде игры, ишибка отобраджается в виде системного alert сообщения. Данный метод вырезается из релизного билда игры, поэтому все обращения к нему должны быть обернуты в DEBUG тег условной компиляции.

/// #if EDITOR
game.__showDebugError("Error message");
/// #endif

Предпочтительнее вместо метода __showDebugError использовать глобальный метод assert, так как последний, в большинстве случаев, удобнее для отладки, и не требует использования условных тегов компиляции.

<- Предыдущая страница Следующая страница ->

Связанные темы:

Общая информация для Javascript разработчика

Clone this wiki locally