В основном он содержит всё, что используется для описания и управления структурой игры (внутри называется «Проект»). Это включает события, сцены, объекты, поведение, события и т. д. Всё это реализовано с использованием классов C++ в папке Project.
GDevelop Core также содержит инструменты для управления этими проектами. В частности, папка Core/GDCore/IDE содержит классы C++, позволяющие выполнять операции со структурой игры. Например, WholeProjectRefactorer — очень мощный инструмент, используемый для переименования всех объектов в игре, обновления событий после удаления объекта и, в более общем смысле, для рефакторинга всего проекта. Каталог содержит другие функции «инструментов» для управления ресурсами проектов или для поиска событий.
В то время как папка GDJS/Runtime является игровым движком, который выполняется внутри игры, GDJS/GDJS — это часть «IDE», которая представляет собой классы C++, описывающие редактору различные вещи:
— как выполнить экспорт, — какие расширения по умолчанию, — как вы генерируете код JS из событий.
Игровой движок находится в GDJS/Runtime и полностью написан на TypeScript.
По умолчанию «событие» — это нечто в основном пустое. В более традиционном языке программирования событие можно рассматривать как область видимости или блок (пример: { some code here }
в стиле C, таком как JavaScript, Java или C++).
Стандартные события определены в GDevelop Core. В частности, существует StandardEvent, у которого есть условия и действия. Условия и действия представляют собой список gd::Instruction
. gd::Instruction
— это либо условие, либо действие (это зависит только от контекста, где они используются).
gd::Instruction
— это просто тип (имя действия или условия) и несколько параметров. Вы можете думать об этом как о функции в языке программирования (add(2, 3)
вызывает функцию с именем «add» с параметрами «2» и «3»). У условий есть особая вещь: они являются функциями, возвращающими истину или ложь (и потенциально используемыми для фильтрации объектов, выбираемых для следующих условий и действий).
Их больше нет! ✨
События переводятся (мы также говорим «транспилируются» или «генерируются») в «реальный» код на языке программирования. Этот процесс называется «генерацией кода» и выполняется здесь для игрового движка TypeScript.
Вы можете это сделать! Пожалуйста, свяжитесь с нами :)
Идея редактора и игрового движка GDevelop заключается в том, чтобы иметь компактный игровой движок, поддерживающий почти ничего. Затем можно добавить «моды», «плагины», «модули» для GDevelop. Мы решили назвать их «Расширениями» в GDevelop.
GDevelop/GDJS/GDJS/Extensions/
повторно использует эти объявления и добавляет свои собственные объявления. В основном они устанавливают имена функций, которые должны быть вызваны (либо в TypeScript, либо в C++) для каждого действия, условия или выражения.
GDevelop/Extensions/
— это папка для «модов» / «плагинов» для GDevelop, тех, что не являются обязательными. Они не являются частью GDCore — они работают сами по себе.
В теории все расширения можно было бы переместить в GDevelop/Extensions/
. На практике более прагматично иметь набор «встроенных» расширений с базовыми функциями.
Всё в GDevelop.js предназначено для создания «моста», позволяющего нам запускать и использовать C++ из JavaScript для IDE, чтобы мы могли написать редактор полностью на JavaScript и заставить его работать в веб-браузере.
Мы используем Emscripten, который компилирует C++, но вместо того, чтобы писать «собственный двоичный файл», он пишет файл, который работает в браузере (в основном, JavaScript!).
Самый полезный файл — Bindings.idl, который описывает всё в C++, что должно быть представлено в JavaScript (в редакторе, а не в игре. Помните, что во время игры мы находимся в Runtime, поэтому всего этого больше не существует).
Остальные файлы в основном представляют собой мосты, выполняющие «странные вещи» для перевода с JS на C++ или наоборот. Это требует некоторого знания о том, как работает «мост», созданный Emscripten и называемый WebIDL.
Вам не нужно работать с ними, если вы не хотите представить что-то, написанное на C++, в редакторе, и написания интерфейса в Bindings.idl недостаточно.
90% времени вы можете просто читать или писать о классе в Bindings.idl. Если вы работаете с классами C++, у вас может быть некоторое время, чтобы добавить заголовочный файл в Wrapper.cpp, и ваш класс C++ «автоматически» компилируется и становится доступным в JavaScript после написания соответствующего интерфейса в Bindings.idl.
Все необходимые файлы C++ импортируются в этот огромный список: https://github.com/4ian/GDevelop/blob/master/GDevelop.js/Bindings/Wrapper.cpp#L1-L79. Компиляция C++ выполняется с помощью «системы сборки», называемой CMake, которая использует этот файл, чтобы увидеть, что нужно скомпилировать.
В идеальном мире было бы что-то, что делало бы это автоматически, так что папка GDevelop.js даже не существовала бы 😉 Если вам интересно и вы хотите узнать больше о соединении между C++ и JavaScript в GDevelop.js, посмотрите эту лекцию от автора оригинального GDevelop.
GDevelop изначально был написан на C++. Это пугающий язык поначалу, но он переносится практически на любую существующую машину в этой вселенной, может быть довольно хорошим, безопасным и читаемым с последними функциями C++.
JavaScript с последними предложениями языка является очень способным языком, быстрым для написания и безопасным с типизацией:
Вообще говоря, интернет — отличная цель для игр с появлением WebGL и WebAssembly, хотя GDevelop должен оставаться модульным, чтобы адаптироваться к новым платформам для экспортируемых игр в будущем.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )