Aus dem fantastischen Raylib Game Framework gegabelt: https://www.raylib.com/
Beachten Sie: Rayfork ist immer noch sehr früh und es wird nicht empfohlen, dass Sie es im Moment professionell verwenden.
Rayfork hat nur eine .c -Datei und hängt nur von LIBC ab, was bedeutet, dass sie leicht als Bibliothek aus der Befehlszeile zusammengestellt werden kann.
# -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 bietet keine Plattformschicht, dh es erstellt kein Fenster, lädt OpenGL oder erfasst Eingaben für Sie.
Dies geschieht nach Design, sodass Sie Rayfork auf mehreren Plattformen (einschließlich Spielkonsolen) problemlos verwenden können, indem Sie die Methode verwenden, die für Sie am besten geeignet ist. Es gibt Vorlagen für die Verwendung von Rayfork mit GLFW, SDL, Sokol-App und benutzerdefinierten Plattformschichten.
Der Renderer verfügt derzeit über OpenGL33- und OpenGL-ES3-Backends (wobei mehr hinzugefügt werden kann) auf tragbare Weise implementiert werden, wodurch Rayfork auf einer beliebigen Plattform kompiliert werden kann, wobei die einzige Abhängigkeit LIBC ist. OpenGL -Procs werden explizit an Rayfork übergeben, und es gibt ein einfaches Makro, das dazu beiträgt.
Aus diesem Grund können Sie Rayfork für jede Plattform leicht kompilieren, sei es PC, Mobile oder Konsolen.
Funktionen, die IO tun, sind oft optional und fordern explizit nach IO -Rückrufe. Ein einfacher Wrapper für die LIBC IO -Funktionen wird als rf_default_io
bereitgestellt.
Funktionen, die explizit nach einem Allocator und manchmal auch für einen temporären Speicher Allocator (Speicher, der in der Funktion befreit wird) zuweisen. Ein einfacher Wrapper für Malloc/Free von LIBC wird als rf_default_allocator
bereitgestellt.
Alle Abhängigkeiten werden auch für individuelle Allokatoren verwendet, die Bibliothek wird niemals zutreffen, ohne dass Sie es wissen.
Jede Funktion, die einen Allocator- oder IO -Rückruf erfordert, hat eine _ez
-Version, die die ursprüngliche Funktion umhüllt und mit rf_default_allocator
und/oder rf_default_io
aufruft. Dies ist nützlich, um Code schnell zu testen.
Die Bibliothek ist nur eine Header- und Quelldatei und kann zum Kompilierzeit mithilfe von Präprozessor -Definitionen angepasst werden. Abhängig vom Grafik -Backend müssen Sie möglicherweise keine zusätzlichen Kompilierflags benötigen, die Sie möglicherweise mit bestimmten Bibliotheken verlinken müssen.
Raylib wurde zunächst zu Bildungszwecken erstellt und ist im Laufe der Zeit in eine sehr nützliche Spielbibliothek gereift, ähnlich wie XNA.
Aufgrund seiner Natur machen mehrere Designentscheidungen in Raylib für professionelle Spieleentwickler jedoch schwierig:
Schwierig zu verwenden eine benutzerdefinierte Plattformschicht (z. B. mit einer benutzerdefinierten Plattformebene auf Android mit Android Studio)
Schwer zu portieren auf anderen Plattformen (z. B. iOS, Konsolen)
Wenig Kontrolle über Speicherzuweisungen und IO.
Rayfork wurde entwickelt, um diese Probleme anzugehen und es einfach zu machen, professionelle Spiele mithilfe der API von Raylib zu entwickeln.
Ich habe dieses Projekt gestartet, weil ich Raylib und C99 liebe und ich mein Spiel wirklich mit ihnen entwickeln wollte.
Viele Bibliotheken folgen jedoch nicht den Prinzipien, nach denen ich in einer Bibliothek suche (siehe diesen Artikel), wodurch die Verwendung in Spielen schwierig/ärgerlich ist. Deshalb möchte ich eine Bibliothek erstellen, die Indie -Entwickler sicher und einfach verwenden können, um ihre Projekte zu entwickeln ohne Kontrolle, Portabilität oder Qualität zu beeinträchtigen.
Wenn Sie in der Lage sein möchten, Spiele einfach mit Bibliotheken zu entwickeln, die die oben genannten Prinzipien respektieren, erwägen Sie bitte einen Beitrag zu Rayfork.
Sie können die Registerkarte "Probleme" überprüfen und viele Dinge finden, die Sie tun können, um einen Beitrag zu leisten.
Ich suche auch Hilfe bei der Entwicklung von Dingen außerhalb meines Fachwissens:
Kontaktieren Sie mich auf dem Raylib Discord Server im #Rayfork -Kanal, ich bin @bananyadev #0001 oder auf Twitter @Sasluca.
Verwenden Sie die Namenskonvention für Snake -Fall und verwenden Sie rf_function_name
für Schnittstellenfunktionen und _rf_function_name
für private Funktionen.
Präfix alle Funktionen mit rf_public
oder RF_INTERNAL
Fügen Sie keine zusätzlichen Header in die Schnittstelle auf, und arbeiten Sie im Allgemeinen in die Minimierung ein.
Verwenden Sie #pragma region #pragma endregion
für die Faltungsregionen von Code und erwägen Sie einen Editor mit Unterstützung für das Falten dieser Regionen, um ein einfacheres Verständnis des Codes zu erhalten.
Versuchen Sie, die Beratung aus diesem Artikel im Allgemeinen anzuwenden. Einige der wichtigeren Ratschläge wären: