Как создать асинхронную функцию
Вы можете создать асинхронное действие, сделав так, чтобы ваша функция возвращала экземпляр AsyncTask (не забудьте также объявить свою функцию как async!). Вы можете сделать AsyncTask самостоятельно, расширив абстрактный базовый класс gdjs.AsyncTask, или, если вы используете асинхронные функции/обещания JavaScript, создав новый gdjs.PromiseTask с вашим обещанием в качестве аргумента.
Как создать поведение, расширяя gdjs.RuntimeBehavior
См. примеры в dummyruntimebehavior.ts (или dummywithshareddataruntimebehavior.ts для примера с общими данными между поведением).
Вам будет интересен конструктор (для инициализации), onDeActivate (вызывается при деактивации поведения), doStepPreEvents и doStepPostEvents (для запуска логики до/после событий в каждом кадре).
Прочитайте о gdjs.RuntimeBehavior, базовом классе, унаследованном всеми поведениями, чтобы увидеть всё, что доступно.
Как создать объект, расширяя gdjs.RuntimeObject
Посмотрите пример в dummyruntimeobject.ts (сам объект) и dummyruntimeobject-pixi-renderer.ts (рендерер, использующий PixiJS).
Вас заинтересует конструктор (чтобы инициализировать вещи), update (вызываемый каждый кадр) и другие методы. В рендерере PIXI проверьте конструктор (где создаются объекты PixiJS). Другие методы зависят от рендерера.
Читайте о gdjs.RuntimeObject, базовом классе, унаследованном всеми объектами.
Как создать эффект («шейдер», фильтр PixiJS)
Смотрите множество примеров в Effects (расширение, содержащее множество эффектов) и light-night-pixi-filter.ts (пример пользовательского фильтра для PixiJS).
Вам нужно будет сохранить код для вашего фильтра PixiJS в файле, а затем вызвать gdjs.PixiFiltersTools.registerFilterCreator, чтобы сообщить игровому движку, как создавать и обновлять фильтр. Не забудьте затем объявить эффект (см. следующий раздел).
ℹ️ Объявление должно быть сделано в файле с именем JsExtension.js. Ваше расширение должно находиться в папке Extensions, в собственном каталоге.
API для объявления расширений почти на 100% эквивалентен способу объявления расширений в C++, поэтому большинство ссылок будут перенаправлять на эту документацию.
Используйте extension.setExtensionInformation, чтобы объявить основную информацию о вашем расширении.
👉 Смотрите пример в примере расширения JsExtension.js файл.
Используйте addAction, addCondition, addExpression или addStrExpression для объявления действий, условий или выражений.
Этот текст можно перевести следующим образом:
Следует вызывать и включать файл.
setAsyncFunctionName
, чтобы сообщить GDevelop подождать разрешения возвращённой задачи перед выполнением последующих действий и подсобытий.setFunctionName
и setAsyncFunctionName
соответственно, чтобы объявить оба в GDevelop, делая действие опционально асинхронным.new gdjs.PromiseTask(yourPromise)
.Вы можете вызывать эти функции для объекта
extension
или для объектов, возвращаемыхextension.addObject
(для объектов) илиextension.addBehavior
(для поведений). Смотрите ниже.
⚠️ Всегда дважды проверяйте, не забыли ли вы аргумент. Такие ошибки/несоответствия могут создать скрытые ошибки, которые могут сделать GDevelop нестабильным или привести к сбою во время использования.
👉 См. пример в файле расширения JsExtension.js (../Extensions/ExampleJsExtension/JsExtension.js).
Добавьте поведение с помощью addBehavior
. Последние два параметра — это gd.Behavior
и объект gd.BehaviorsSharedData
, представляющий поведение и его (необязательно) общие данные.
— Для поведения создайте новый new gd.BehaviorJsImplementation()
и определите initializeContent
, updateProperty
и getProperties
.
— Для общих данных (которые являются свойствами, общими для всех поведений одного типа), если они вам не нужны, просто передайте new gd.BehaviorsSharedData()
. Если вам нужны общие данные, создайте new gd.BehaviorSharedDataJsImplementation()
и определите initializeContent
, updateProperty
и getProperties
.
⚠️ Как и другие функции для объявления расширений, убедитесь, что вы не забыли объявить функцию и что все аргументы верны.
👉 См. пример в файле расширения JsExtension.js (../Extensions/ExampleJsExtension/JsExtension.js). Подробнее о свойствах читайте здесь (docs/Properties-schema-and-PropertiesEditor-explanations.md).
Добавьте объект с помощью addObject
. Последний параметр — это объект gd.Object
, представляющий объект:
— Создайте новый new gd.ObjectJsImplementation()
и определите updateProperty
и getProperties
(для свойств объекта) и updateInitialInstanceProperty
и getInitialInstanceProperties
(для необязательных свойств, которые прикреплены к каждому экземпляру).
👉 Смотрите пример в файле расширения JsExtension.js (../Extensions/ExampleJsExtension/JsExtension.js). Подробнее о свойствах читайте здесь (docs/Properties-schema-and-PropertiesEditor-explanations.md).
ℹ️ После этого вы действительно сможете увидеть свой объект в GDevelop! Прочитайте следующие разделы, чтобы узнать, как добавить редактор и средство визуализации для экземпляров в редакторе сцен.
Свойство — это глобальное значение конфигурации для вашего расширения. Примером может служить App ID для AdMob.
Чтобы объявить его, просто используйте registerProperty
:
// Из ExampleJsExtension/JsExtension.js:
extension
.registerProperty("DummyPropertyString")
.setLabel(_("Dummy Property Name"))
.setDescription(_("Type in anything :)"))
.setType("string");
После объявления вы можете получить доступ к свойству из JavaScript в игровом движке, используя метод getExtensionProperty
класса gdjs.RuntimeGame
. Передайте имя расширения и имя свойства. Это позволит получить, например, свойство AdMobAppId расширения AdMob:
const appId = runtimeGame.getExtensionProperty("AdMob", "AdMobAppId");
Если свойство не существует, оно вернёт null. Внутреннее имя должно совпадать с именем папки для единообразия.
Удалите все объявления действий/условий/выражений и тесты, запустите node import-GDJS-Runtime.js
и перезагрузите GDevelop, чтобы убедиться, что ваше расширение загружено.
Создайте файл с именем, например, yourextensionnametools.js в том же каталоге.
Добавьте обратно объявления в вашем расширении. Используйте setIncludeFile
, когда объявляете свои действия/условия/выражения, и установите имя файла ts, который вы создали, но с расширением js, с префиксом пути от корневой папки. Например:
.setIncludeFile("Extensions/FacebookInstantGames/facebookinstantgamestools.ts")
Если у вас есть идеи или вы создаёте новое расширение, ваш вклад приветствуется!
Чтобы отправить своё расширение, сначала создайте форк на GitHub (используйте кнопку Fork в правом верхнем углу), затем создайте запрос на вытягивание.
Проверьте дорожную карту для идей и запланированных функций.
Также возможно несколько улучшений, позволяющих использовать весь потенциал расширений:
JsExtension.cpp
или Extension.cpp
)Некоторые расширения по-прежнему объявляются на C++, чтобы быть совместимыми с GDevelop 4. Проверьте исходные коды в папке Extensions и установите GDevelop.js. Затем вы сможете вносить изменения в исходные файлы на C++ и видеть их отражение в редакторе.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )