1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-gdevelop

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-extensions.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 08:49 6c27ef6

Как создать асинхронную функцию

Вы можете создать асинхронное действие, сделав так, чтобы ваша функция возвращала экземпляр 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, чтобы сообщить игровому движку, как создавать и обновлять фильтр. Не забудьте затем объявить эффект (см. следующий раздел).

2.2) Объявите своё расширение в IDE 👋

ℹ️ Объявление должно быть сделано в файле с именем JsExtension.js. Ваше расширение должно находиться в папке Extensions, в собственном каталоге.

API для объявления расширений почти на 100% эквивалентен способу объявления расширений в C++, поэтому большинство ссылок будут перенаправлять на эту документацию.

Объявите информацию о расширении

Используйте extension.setExtensionInformation, чтобы объявить основную информацию о вашем расширении.

👉 Смотрите пример в примере расширения JsExtension.js файл.

Объявляйте действия, условия и выражения

Используйте addAction, addCondition, addExpression или addStrExpression для объявления действий, условий или выражений.

  • Свяжите вызовы с addParameter, чтобы объявить параметры вашего действия/условия/выражения.
  • Вызовите getCodeExtraInformation(), а затем такие функции, как setFunctionName и setIncludeFile, чтобы объявить функцию JavaScript. Текст запроса написан на английском языке.

Этот текст можно перевести следующим образом:

Следует вызывать и включать файл.

  • Если ваша функция асинхронная, вместо этого вызовите 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")

4) Как внести свой вклад? 😎

Если у вас есть идеи или вы создаёте новое расширение, ваш вклад приветствуется!

  • Чтобы отправить своё расширение, сначала создайте форк на GitHub (используйте кнопку Fork в правом верхнем углу), затем создайте запрос на вытягивание.

  • Проверьте дорожную карту для идей и запланированных функций.

  • Также возможно несколько улучшений, позволяющих использовать весь потенциал расширений:

    • Добавить поддержку событий
    • Документировать, как добавлять пользовательские значки
    • Добавить кнопку для перезагрузки расширений без полной перезагрузки IDE GDevelop.

Примечание о разработке расширений, объявленных на C++ (JsExtension.cpp или Extension.cpp)

Некоторые расширения по-прежнему объявляются на C++, чтобы быть совместимыми с GDevelop 4. Проверьте исходные коды в папке Extensions и установите GDevelop.js. Затем вы сможете вносить изменения в исходные файлы на C++ и видеть их отражение в редакторе.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-gdevelop.git
git@api.gitlife.ru:oschina-mirror/mirrors-gdevelop.git
oschina-mirror
mirrors-gdevelop
mirrors-gdevelop
master