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

OSCHINA-MIRROR/mirrors-gdevelop

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

В основном он содержит всё, что используется для описания и управления структурой игры (внутри называется «Проект»). Это включает события, сцены, объекты, поведение, события и т. д. Всё это реализовано с использованием классов C++ в папке Project.

GDevelop Core также содержит инструменты для управления этими проектами. В частности, папка Core/GDCore/IDE содержит классы C++, позволяющие выполнять операции со структурой игры. Например, WholeProjectRefactorer — очень мощный инструмент, используемый для переименования всех объектов в игре, обновления событий после удаления объекта и, в более общем смысле, для рефакторинга всего проекта. Каталог содержит другие функции «инструментов» для управления ресурсами проектов или для поиска событий.

Что находится внутри GDJS? Почему я вижу там некоторые файлы C++?

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

Почему я не могу увидеть «RuntimeEvent» или события во время игры?

Их больше нет! ✨

События переводятся (мы также говорим «транспилируются» или «генерируются») в «реальный» код на языке программирования. Этот процесс называется «генерацией кода» и выполняется здесь для игрового движка TypeScript.

Могу ли я извлечь классы событий и генератор кода, чтобы создать среду разработки на основе событий GDevelop?

Вы можете это сделать! Пожалуйста, свяжитесь с нами :)

Я вижу более одной папки Extensions, почему?

Идея редактора и игрового движка GDevelop заключается в том, чтобы иметь компактный игровой движок, поддерживающий почти ничего. Затем можно добавить «моды», «плагины», «модули» для GDevelop. Мы решили назвать их «Расширениями» в GDevelop.

  • GDevelop/Core/GDCore/Extensions — это объявление стандартных (мы говорим «встроенных») расширений, которые доступны для любой игры и являются «обязательными». Они называются расширениями, но их можно было бы назвать «расширениями, которые всегда будут в вашей игре». В языках программирования это называется «стандартной библиотекой». Но не слишком отвлекайтесь на это именование.

GDevelop/GDJS/GDJS/Extensions/ повторно использует эти объявления и добавляет свои собственные объявления. В основном они устанавливают имена функций, которые должны быть вызваны (либо в TypeScript, либо в C++) для каждого действия, условия или выражения.

GDevelop/Extensions/ — это папка для «модов» / «плагинов» для GDevelop, тех, что не являются обязательными. Они не являются частью GDCore — они работают сами по себе.

В теории все расширения можно было бы переместить в GDevelop/Extensions/. На практике более прагматично иметь набор «встроенных» расширений с базовыми функциями.

Что такое GDevelop.js? Нам это важно?

Всё в 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.

Я хочу знать все кровавые подробности о GDevelop.js 🧐

Все необходимые файлы C++ импортируются в этот огромный список: https://github.com/4ian/GDevelop/blob/master/GDevelop.js/Bindings/Wrapper.cpp#L1-L79. Компиляция C++ выполняется с помощью «системы сборки», называемой CMake, которая использует этот файл, чтобы увидеть, что нужно скомпилировать.

В идеальном мире было бы что-то, что делало бы это автоматически, так что папка GDevelop.js даже не существовала бы 😉 Если вам интересно и вы хотите узнать больше о соединении между C++ и JavaScript в GDevelop.js, посмотрите эту лекцию от автора оригинального GDevelop.

Разные вопросы

Что за история с C++? Почему так много?

GDevelop изначально был написан на C++. Это пугающий язык поначалу, но он переносится практически на любую существующую машину в этой вселенной, может быть довольно хорошим, безопасным и читаемым с последними функциями C++.

А что с JavaScript/TypeScript? Почему так много?

JavaScript с последними предложениями языка является очень способным языком, быстрым для написания и безопасным с типизацией:

  • Производительность становится довольно хорошей благодаря последним функциям JIT в браузерах.
  • Фреймворки для фронтенда, такие как React, используемые для IDE GDevelop, позволяют очень быстро и модульно разрабатывать интерфейс.
  • Интернет — невероятная и непревзойдённая цель, когда речь заходит о кроссплатформенных (и кросс-форм-факторных) приложениях.

Вообще говоря, интернет — отличная цель для игр с появлением WebGL и WebAssembly, хотя GDevelop должен оставаться модульным, чтобы адаптироваться к новым платформам для экспортируемых игр в будущем.

Опубликовать ( 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