Разветвленная из потрясающей игры Raylib Game: https://www.raylib.com/
Примечание: Rayfork все еще находится в очень раннем развитии, и не рекомендуется использовать его профессионально в настоящее время.
RayFork имеет только один файл .c и зависит только от LIBC, что означает, что его можно легко скомпилировать в виде библиотеки из командной строки.
# -c compiles the code as a library
# -EHsc disables exceptions on msvc
gcc -c rayfork.c
clang -c rayfork.c
cl -c -EHsc rayfork.c
RayFork не предоставляет слой платформы, что означает, что он не создает окно, загрузите OpenGL или захват вход для вас.
Это по дизайну, так что вы можете легко использовать RayFork на нескольких платформах (включая игровые приставки), используя метод, который лучше всего подходит для вас. Существуют шаблоны для использования RayFork с слоями GLFW, SDL, Sokol-App и пользовательских платформ.
В настоящее время рендерер имеет бэкэнды OpenGL33 и OpenGL-ES3 (с большим количеством добавленных), которые реализованы портативным образом, что позволяет собирать RayFork на любой платформе, причем единственной зависимостью является LIBC. OpenGL Procs явно передается RayFork, и есть простой макрос, который поможет с этим.
Из -за этого вы можете легко скомпилировать RayFork для любой платформы, будь то ПК, мобильные или консоли.
Функции, которые делают IO, часто не являются обязательными и явно просят обратных вызовов. Простая обертка для функций LIBC IO предоставляется как rf_default_io
.
Функции, которые выделяют явно просят выделения, а иногда и для временного распределения памяти (память, которая освобождается внутри функции). Простая обертка для Libc Malloc/Free предоставляется в виде rf_default_allocator
.
Все зависимости также используются с учетом индивидуальных распределителей, библиотека никогда не будет распределяться без вас.
Каждая функция, которая требует вызовов Allocator или IO, имеет версию _ez
, которая завершает исходную функцию и вызывает ее с помощью rf_default_allocator
и/или rf_default_io
, это полезно для быстрого тестирования кода.
Библиотека представляет собой только один заголовок и исходный файл и может быть настроена во время компиляции, используя определения препроцессора. Никаких дополнительных компиляций не требуется, в зависимости от бэкэнда графики, которая вам может потребоваться связать с определенными библиотеками.
Raylib был изначально создан для образовательных целей и со временем созрел в очень полезной библиотеке игр, аналогичной XNA.
Однако из -за своей природы несколько вариантов дизайна в Raylib затрудняют использование для профессиональных разработчиков игр:
Трудно использовать пользовательский слой платформы (например, использование с пользовательским уровнем платформы на Android с Android Studio)
Трудно переносить на другие платформы (например: iOS, консоли)
Небольшой контроль над распределением памяти и IO.
RayFork предназначен для решения этих проблем и облегчения развития профессиональных игр, используя API от Raylib.
Я начал этот проект, потому что я люблю Raylib и C99, и я действительно хотел разработать свою игру, используя их.
Многие библиотеки, однако, не следуют принципам, которые я ищу в библиотеке (см. Эта статья), которые делают их в играх жесткими/раздражающими, поэтому я хочу создать библиотеку, которую инди -разработчики могут уверенно и легко использовать для разработки своих проектов не жертвуя контролем, переносимостью или качеством.
Если вы хотите легко разрабатывать игры с библиотеками, которые уважают указанные выше принципы, пожалуйста, рассмотрите возможность внести свой вклад в Rayfork.
Вы можете проверить вкладку «Проблемы» и найти много вещей, которые вы можете сделать, чтобы внести свой вклад.
Я также ищу помощь в развитии вещей вне моего опыта:
Свяжитесь со мной на сервере Discord Raylib в канале #RayFork, я @Bananyadev #0001 или в Twitter @sasluca.
Держите соглашение об именах для корпуса Snake, используйте rf_function_name
для интерфейсных функций и _rf_function_name
для частных функций.
Префикс все функции с rf_public
или RF_INTERNAL
Не включайте дополнительные заголовки в интерфейс, работа по минимизации включает в себя в целом.
Используйте #pragma region #pragma endregion
для складных областей кода и рассмотрите возможность использования редактора с поддержкой складывания этих регионов, чтобы получить более легкое понимание кода.
Попробуйте применить советы из этой статьи в целом. Некоторые из наиболее важных советов будут: