eepp ist ein Open-Source-Framework für die plattformübergreifende Spiele- und Anwendungsentwicklung, das sich stark auf die Entwicklung umfangreicher grafischer Benutzeroberflächen konzentriert.
Offizielle Unterstützung für Linux, Windows, macOS, Android und iOS.
Exporte nach HTML5 mit emscripten mit einigen geringfügigen Einschränkungen.
Funktioniert auch auf BSD und Haiku.
Basis-Widgets zum Verwalten der App-/Spielobjekte als Knoten mit allen grundlegenden Eingabeinteraktionsereignissen (Klicks, Tastendruck, Mouseover, Fokus usw.).
Voll ausgestattetes UI-System, Animationsunterstützung, Skalierung, Drehung, Ausschneiden, Ereignisse, Nachrichten usw.
Unterstützung für Themen und Skins/Dekorationen.
Unterstützung der Pixeldichte (Skalierung von UI-Elementen, definiert durch die Pixeldichte des Bildschirms).
Alle grundlegenden Widgets sind implementiert (Schaltfläche, Textfeld, Kombinationsfeld, Eingabefeld, Menü, Listenfeld, Bildlaufleisten usw.).
Unterstützung für Draw-Invalidierung. Es kann verwendet werden, um echte Apps mit geringem Ressourcenverbrauch zu erstellen (wird nur bei Bedarf neu gezeichnet).
Layoutsystem ähnlich Android-Layouts (LinearLayout, RelativeLayout, GridLayout).
Erweiterte Funktionen wie Textauswahl, Kopieren und Einfügen sowie Tastenkombinationen.
Laden und formatieren Sie Layouts aus XMLs
Styling mit Cascading Style Sheets
Renderer für OpenGL 2 (feste Pipeline), OpenGL 3 (programmierbare Pipeline), OpenGL ES 2, OpenGL ES 1 und OpenGL Core Profile.
Batch-Renderer (das gesamte Rendering wird automatisch von der Engine gestapelt).
Unterstützung für Schriftarten (TrueType-, BMFont- und XNA-Schriftarten).
Frame Buffer-Unterstützung.
Shader-Unterstützung (mit automatischer fester Pipeline von Shader zu programmierbarem Konverter).
Unterstützung für Vertex-Pufferobjekte.
Partikelsystem.
Ausziehbare Konsole.
Animierte Sprites.
Texturatlas-Unterstützung (automatische Erstellung und Aktualisierung des Texturatlas, inklusive Editor).
Schnittmasken (Schablone, Schere, Hobel)
Unterstützung für neun in der Größe veränderbare Bitmaps.
Primitive Zeichenvorlagen.
Viele Bildformate werden unterstützt (einschließlich gerastertem SVG), komprimierte Texturen werden unterstützt (direktes Hochladen auf die GPU, wenn möglich).
Backend-basiertes Modul, das bedeutet, dass Sie ganz einfach ein Backend für die Fenster-/Eingabeverarbeitung erstellen können.
Unterstützt derzeit SDL 2 als Backend.
Unterstützung für die Zwischenablage.
Hardware-Cursor.
Display-Manager
Joystick-Unterstützung.
Bietet alle grundlegenden Dinge für die vollständige Multithreading-Unterstützung der Bibliothek, Unterstützung für Dateiformate zum Packen, Uhren, Ressourcenmanager, Übersetzer und vieles mehr.
Virtuelle Dateisystemklasse (Abstraktion von Asset-Anbietern in ein einziges virtuelles Dateisystem, Zusammenfassung von ZIP-Dateien und lokalem Dateisystem in ein einziges für eine transparente Auslastung von Ressourcen, ähnlich wie PhysicsFS).
Anpassbarer Speichermanager. Wird standardmäßig im Debug-Modus verwendet, um Speicherlecks zu verfolgen.
UTF8, UTF-16, UTF-32, Ansi, Wide Char-Unterstützung.
String-Klasse, die intern UTF-32-Zeichen verwendet.
Debug-Makros
Allgemeine Funktionen und Vorlagen (Vektor, Quad, Polygon usw.).
Interpolationsklassen mit Beschleunigung.
Einige kleinere mathematische Dienstprogramme umfassen die Implementierung des Zufallszahlengenerators Mersenne Twister, Perlin Noise und mehr.
Webanfragen mit HTTP-Client, mit TLS-Unterstützung (bereitgestellt von mbedtls oder openssl).
Asynchrone HTTP-Anfragen.
Dateiübertragungen mit FTP-Client und FTPS-Client (FTP mit explizitem TLS).
TCP- und UDP-Sockets.
Unterstützung für HTTP-Content-Encoding und Transfer-Encoding.
HTTP-Proxy-Unterstützung.
Unterstützung für komprimierte HTTP-Antworten.
Außerdem HTTP-Unterstützung für das Fortsetzen/Fortsetzen des Downloads und automatische Folgeweiterleitungen.
Knotenbasiertes System zur einfachen Verwaltung von Szenen.
Vollständige Kontrolle über Knotenereignisse (Klicks, Mouseover, Fokus usw.).
Ereignissystem.
Knoten-Nachrichtensystem.
Programmierbare Aktionen für Knoten (Einblenden, Drehen, Verschieben, Skalieren usw.).
Gekachelte Karten mit dynamischen Software-Lichtern.
Voll ausgestatteter Karteneditor.
Sehr einfacher UI-Editor. Laden Sie Layouts aus einer XML-Datei und sehen Sie die vorgenommenen Änderungen in Echtzeit.
Texturatlas-Editor. Ein sehr einfaches Tool, mit dem Entwickler Texturatlanten erstellen und bearbeiten können.
Karteneditor: Ein fortschrittlicher, aber einfacher Karteneditor für die Spiel-Engine. Es fehlen einige Funktionen, da ich keine Zeit hatte, daran zu arbeiten. Dieses spezielle Tool wird wahrscheinlich in naher Zukunft zugunsten der TMX-Kartenunterstützung verschwinden (aber ich bin kein Fan von TMX-Karten, daher gibt es keine Entscheidung dafür der Augenblick).
Die Dokumentation finden Sie hier. Ich arbeite derzeit daran, es zu verbessern. Etwa 50 % des Projekts sind derzeit dokumentiert, sodass noch viel Arbeit erforderlich ist. Bitte überprüfen Sie die Codebeispiele in src/examples
. Sie können sich auch den Test ( src/test
) und die Tools ( src/tools
) ansehen.
Ich bemühe mich, die Dokumentation des UI-Moduls zu verbessern, da es derzeit das wichtigste und komplexeste Modul ist, es aber an einer ordnungsgemäßen Dokumentation mangelt. Wenn Sie Fragen haben, können Sie mich jederzeit kontaktieren.
Das Repository verwendet Git-Submodule, daher müssen Sie das Repository und seine Submodule klonen. Um dies einfach zu erreichen, können Sie einfach klonen mit:
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode ist ein von Lite inspirierter Code-Editor. Es verwendet das neueste reine CSS-Theme, das auf dem standardmäßigen dunklen Plasma-Theme basiert: Breeze Dark.
Editor, der die Änderungen an jedem Layout und CSS in Echtzeit anzeigt, um die Entwicklung von Benutzeroberflächen zu beschleunigen. Im Screenshot werden einige der in eepp verfügbaren Standard-Widgets angezeigt.
Kleines Tool zum Erstellen und Bearbeiten von Texturatlanten.
2D-Karteneditor mit dem standardmäßigen Skin-Design (unter Verwendung eines einzelnen Texturatlas mit 9-Patch-Bildern).
Es dürfte jedem Android-Entwickler bekannt vorkommen. Dies ist ein Fenster mit den grundlegendsten Widgets in einer vertikalen linearen Layoutanzeige.
< window layout_width = " 300dp " layout_height = " 300dp " window-flags = " default|maximize|shadow " >
< LinearLayout id = " testlayout " orientation = " vertical " layout_width = " match_parent " layout_height = " match_parent " layout_margin = " 8dp " >
< TextView text = " Hello World! " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " backgroundColor = " black " />
< PushButton text = " OK! " textSize = " 16dp " icon = " ok " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " />
< Image src = " thecircle " layout_width = " match_parent " layout_height = " 32dp " flags = " clip " />
< Sprite src = " gn " />
< TextInput text = " test " layout_width = " match_parent " layout_height = " wrap_content " />
< DropDownList layout_width = " match_parent " layout_height = " wrap_content " selectedIndex = " 0 " >
< item >Test Item</ item >
< item >@string/test_item</ item >
</ DropDownList >
< ListBox layout_width = " match_parent " layout_height = " match_parent " layout_weight = " 1 " >
< item >Hello!</ item >
< item >World!</ item >
</ ListBox >
</ LinearLayout >
</ window >
Eine Einführung in die Benutzeroberfläche finden Sie hier .
Wie sieht es mit echtem Code aus?
UITextView::New ()->setText( " Text on test 1 " )
->setCharacterSize( 12 )
->setLayoutMargin( Rect ( 10 , 10 , 10 , 10 ) )
->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::WrapContent )
->setParent( layout );
Das Element-Styling kann mit einer benutzerdefinierten Implementierung von Cascading Style Sheets erfolgen. Es stehen die meisten gängigen CSS2-Regeln sowie mehrere CSS3-Regeln zur Verfügung (einige Beispiele: Animationen, Übergänge, benutzerdefinierte Eigenschaften, Medienabfragen, @font-face at-Regel, :root-Element). . Hier ist ein kleines Beispiel, wie das CSS aussieht:
@font-face {
font-family : "OpenSans Regular" ;
src : url ( "https://raw.githubusercontent.com/SpartanJ/eepp/develop/bin/assets/fonts/OpenSans-Regular.ttf" );
}
@import url ( "assets/layouts/imported.css" ) screen and ( min-width : 800 px );
: root {
--font-color : black;
--background-input-color : rgba ( 255 , 255 , 255 , 0.7 );
--border-color : black;
--border-width : 1 dp ;
}
. screen TextView {
color : var ( --font-color );
}
. form {
background-image : @drawable /back;
background-repeat : no-repeat;
background-size : cover;
}
. form . form_inputs {
background-color : var ( --non-existent , var ( --background-input-color ));
margin-left : 100 dp ;
margin-right : 100 dp ;
padding-top : 72 dp ;
padding-left : 57 dp ;
padding-right : 57 dp ;
padding-bottom : 115 dp ;
}
. screen TextView . input ,
. screen TextInput . input {
font-family : AkzidenzGroteskBQ-Cnd;
layout-width : match_parent;
layout-height : 80 dp ;
border-color : var ( --border-color );
border-width : var ( --border-width );
color : var ( --font-color );
padding-left : 40 dp ;
padding-right : 40 dp ;
margin-bottom : 32 dp ;
skin : none;
hint-font-family : AkzidenzGroteskBQ-Cnd;
hint-font-size : 46 dp ;
hint-color : # 818285 ;
background-color : # FFFFFF00 ;
transition : all 0.125 s ;
}
. screen TextInput . input : focus {
background-color : # FFFFFF66 ;
border-color : # 796500 ;
}
. screen TextInput . input : hover {
background-color : # FFFFFF66 ;
}
@media screen and ( max-width : 1024 px ) {
. form . form_inputs {
background-color : red;
}
}
Die vollständige CSS-Spezifikation finden Sie in den Dokumenten: hier.
Wie ein reines CSS-Theme in eepp aussieht, können Sie auch hier überprüfen.
Da eepp emscripten unterstützt, können Sie einen kurzen Blick auf einige der Beispiele, Demos und Tools werfen, die die Bibliothek derzeit bereitstellt. Bitte beachten Sie, dass es einige Unterschiede geben wird, die auf den aktuellen Einschränkungen von Emscripten beruhen (kein Zugriff auf das Dateisystem, keine benutzerdefinierten Cursor usw.) und dass Demos auch nicht für die Größe optimiert sind und größer sind, als sie sollten Sei. Hinweis: Bitte verwenden Sie einen modernen Browser mit guter WebGL- und WASM-Unterstützung (Chrome/ium 70+ oder Firefox 80+).
ecode – Code-Editor
UI-Editor
Benutzeroberfläche Hallo Welt
Texturatlas-Editor
Karteneditor
Beispiel für Schriftarten
Demo zum Physikmodul
Sprites-Beispiel
Vollständiger Test
7GUIs ist als „GUI-Programmier-Benchmark“ bekannt und wird verwendet, um verschiedene GUI-Bibliotheken zu vergleichen und jeden Bibliotheksansatz für die GUI-Programmierung zu untersuchen. Alle 7 in 7GUIs vorgeschlagenen Aufgaben wurden für eepp implementiert. Die Aufgaben stellen sehr gut dar, was mit der eepp-GUI erreicht werden kann, und sind auch sehr nützlich, um zu demonstrieren, wie verschiedene Aufgaben mit der Bibliothek implementiert werden.
Die 7GUIs setzen sich aus folgenden Aufgaben zusammen:
Counter: Demo und Code-Implementierung.
Temperaturkonverter: Demo und Code-Implementierung.
Flight Booker: Demo und Code-Implementierung.
Timer: Demo und Code-Implementierung.
CRUD: Demo und Code-Implementierung.
Circle Drawer: Demo und Code-Implementierung.
Zellen: Demo und Code-Implementierung.
Die Bibliothek hat nur eine externe Abhängigkeit. Sie benötigen lediglich die SDL2- Bibliothek mit installierten Headern. Außerdem wird premake5 oder premake4 benötigt, um die Makefiles oder Projektdateien zum Erstellen der Bibliothek zu generieren. Ich gehe davon aus, dass Sie wissen, was Sie tun, und überspringe die Grundlagen.
Hinweis: eepp verwendet standardmäßig mojoAL als OpenAL-Drop-in-Ersatz. OpenAL ist optional als Audio-Backend verfügbar. Wenn Sie es verwenden möchten, haben Sie die Alternative, es zu aktivieren. Um es zu aktivieren und den mojoAL-Drop-in-Ersatz zu deaktivieren, müssen Sie den Parameter --without-mojoal
zu jedem premake
-Aufruf hinzufügen (z. B. premake5 --without-mojoal gmake2
).
In einem Ubuntu-System würde es etwa so aussehen (Sie benötigen außerdem gcc, aber es wird trotzdem installiert):
sudo apt-get install premake5 libsdl2-2.0-0 libsdl2-dev libopenal1 libopenal-dev
Klonen Sie das Repository und führen Sie es im Repository-Stammverzeichnis aus:
premake5 gmake2
oder wenn Sie premake4 installiert haben, können Sie Folgendes ausführen:
premake4 gmake
Dann erstellen Sie einfach die Bibliothek:
make -C make/linux
Das ist es. Das wird das gesamte Projekt aufbauen.
Sie haben zwei Möglichkeiten: Erstellen Sie mit Visual Studio oder mit MinGW. Um das Projekt zunächst mit einer dieser Optionen erstellen zu können, müssen Sie die Projektdateien mit premake4 oder premake5 generieren. Dann müssen Sie die Binärdatei zu einem der in PATH
definierten ausführbaren Pfade hinzufügen (oder einen hinzufügen oder ihn von einem lokalen Pfad aus verwenden). Laden Sie je nach Bedarf Visual Studio- oder MinGW- Dateien herunter.
Sie müssen premake5 verwenden und Folgendes ausführen:
premake5.exe --windows-vc-build vs2022
Dann sollten die Projektdateien in make/windows/
zu finden sein. Eine Komplettlösung und das gesamte Projekt werden verfügbar sein. Nachdem Sie alles installiert haben, können Sie die Visual Studio- Lösung wie jedes andere Projekt erstellen.
Mit dem Befehlszeilenargument --windows-vc-build
wird die SDL2-Abhängigkeit automatisch heruntergeladen und die Pfade zum Build-Prozess hinzugefügt, um eine Verknüpfung damit herzustellen, ohne dass externe Abhängigkeiten manuell heruntergeladen werden müssen.
Dann erstellen Sie einfach die Lösung in Visual Studio oder führen Sie MSBuild
manuell in einer Konsole aus:
"%MSBUILD_PATH%MSBuild.exe" .makewindowseepp.sln -m
Wobei %MSBUILD_PATH%
der MSBuild.exe Visual Studio-Pfad ist. Für VS2022 Community Edition lautet der Pfad beispielsweise normalerweise:
C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBin
Windows MinGW-Builds werden mit der w64devkit-Distribution erstellt und getestet. MSYS wird derzeit aufgrund einiger Probleme beim Build-Prozess nicht offiziell unterstützt (es ist jedoch möglich, mit einigen zusätzlichen Schritten zu erstellen).
Wenn Sie w64devkit verwenden, müssen Sie es herunterladen und extrahieren. Wir gehen davon aus, dass es unter C:w64devkit
extrahiert wird.
Führen Sie C:w64devkitw64devkit.exe
als Administrator aus ( right click
-> Run as administrator
).
Gehen Sie dann zum geklonten eepp
Repository-Verzeichnis und führen Sie Folgendes aus:
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
lädt automatisch externe Abhängigkeiten herunter und verknüpft sie (SDL2).
Dann erstellen Sie einfach das Projekt in make/windows/
mit mingw32-make.exe
oder einem gleichwertigen Element:
mingw32-make.exe -C make\windows config=release_x86_64
Um einen Debug-Build zu erstellen, führen Sie Folgendes aus:
mingw32-make.exe -C make\windows config=debug_x86_64
Und stellen Sie dann sicher, dass Sie die Datei SDL2.dll
unter src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
nach bin
kopieren. Wenn eepp.dll
(oder eepp-debug.dll
) aus irgendeinem Grund nicht automatisch kopiert wird, können Sie sie von libs/windows/x86_64/
nach bin
kopieren.
Sie benötigen die vorgefertigten Binärdateien und Entwicklungsbibliotheken von SDL2. OpenAL ist im Betriebssystem enthalten. Installieren Sie das SDL2-Framework und Sie sollten in der Lage sein, das Projekt zu erstellen.
Sie haben zwei Möglichkeiten, das Projekt zu erstellen: mit XCode oder mit Makefiles . Um zunächst mit einer der beiden Optionen zu erstellen, müssen Sie die Projektdateien auch mit premake4 oder premake5 erstellen.
Generieren Sie das Projekt:
premake5 --use-frameworks gmake2
Und baue es:
make -C make/macosx
Sie können das Skript projects/osx/make.sh
verwenden, das die Makefiles generiert und das Projekt erstellt.
Laufen:
premake5 --use-frameworks xcode4
Und öffnen Sie das unter make/macosx/
generierte XCode-Projekt oder erstellen Sie es einfach über die Befehlszeile mit:
xcodebuild -project make/macosx/project-name.xcodeproj
Es gibt ein Gradle-Projekt in projects/android-project/
. Es wird die Bibliothek mit allen enthaltenen Abhängigkeiten erstellt. Nutzen Sie das Beispielprojekt als Grundlage für Ihr Projekt. Beachten Sie, dass es eine eepp.mk
-Projektdatei gibt, die die Bibliothek erstellt. Diese Datei kann in Ihren Projekten verwendet werden.
Das Projekt stellt zwei Dateien zum Erstellen der Bibliothek und der Demos bereit. Sie können jede davon je nach Bedarf verwenden. Die Dateien befinden sich in projects/ios
:
Dieses Skript kann verwendet werden, um die Xcode-Projekte und Lösungen aller in eepp enthaltenen Projekte (Demos, Tools, gemeinsam genutzte Bibliothek, statische Bibliothek usw.) zu generieren. Außerdem wird die SDL2-Fat-Static-Bibliothek heruntergeladen und erstellt, um die Bibliothek auf das Projekt verweisen zu können. Nach dem Erstellen der Projekte müssen Sie leider einige kleinere Änderungen an allen Projekten vornehmen, die Sie nicht erstellen oder testen möchten, da dem generierten Projekt einige kleinere Konfigurationen fehlen. Nachdem Sie dieses Skript ausgeführt haben, müssen Sie die Lösung öffnen, die sich in make/ios/eepp.xcworkspace
befindet. Das Erstellen der statischen Bibliotheken wird kein Problem darstellen (das funktioniert sofort). Um einige der Beispiele zu testen, ist jedoch Folgendes erforderlich:
Wählen Sie (klicken Sie auf den Projektnamen) das Projekt aus, das Sie testen möchten, zum Beispiel eepp-empty-window
. Sie werden mehrere Registerkarten/Optionen sehen, gehen Sie zu Build Settings und suchen Sie die Option Info.plist- Datei, doppelklicken Sie zum Bearbeiten und schreiben Sie: Info.plist
. Dies zeigt an, dass die Datei gelesen werden soll, die sich im selben Verzeichnis wie das Projekt befindet. Gehen Sie dann zur Registerkarte „Allgemein“ und ergänzen Sie die Bundle-ID mit einem Identifikatornamen des App-Bundles, das generiert werden soll. Für dieses Beispiel können Sie etwa Folgendes verwenden: eepp-empty-window
. Dadurch können Sie das Projekt erstellen und ausführen.
Diese eepp-empty-window
-Demo verwendet keine Assets/Ressourcen, aber andere Demos müssen Assets laden, und diese Assets müssen dem Projekt hinzugefügt werden, um für das App-Bundle verfügbar zu sein. Für das Projekt eepp-ui-hello-world
müssen Sie beispielsweise den assets
-Ordner zum Projekt hinzufügen. Was Sie tun müssen, ist: Wählen Sie das Projekt aus und gehen Sie zur Registerkarte „Build-Phasen“ , klicken Sie unter „Bundles-Ressourcen kopieren“ auf das Pluszeichen (+), gehen Sie dann zu „Andere hinzufügen...“ und suchen Sie den Ordner bin/assets/
und wählen Sie ihn aus Beenden . Das sollte reichen.
Mit diesem Skript können SDL2 und eepp als zwei fette statische Bibliotheken mit arm64- und x86_64-Architekturen erstellt werden (arm64 für iPhone/iPad und x86_64 für die Simulatoren). Um einen Release-Build zu generieren, übergeben Sie config=release
als Parameter für das Skript ( sh compile-all.sh config=release
“). Die erstellten Dateien befinden sich in libs/ios/
als libSDL2.a
und libeepp.a
(oder libeepp-debug.a
für Debug-Build). Diese beiden Dateien können Sie in Ihr Projekt integrieren.
Sie müssen zunächst emscripten herunterladen und installieren. Dann gibt es ein Skript zum Erstellen des emscripten- Projekts in projects/emscripten/make.sh
. Bevor Sie dieses Skript ausführen, denken Sie daran, die emsdk-Umgebung festzulegen. Diese sollte etwa wie folgt lauten: source /path/to/emsdk/emsdk_env.sh
. Das sollte unter GNU/Linux oder macOS ausreichen (habe dies nur unter GNU/Linux getestet).
Alle Binärdateien befinden sich nach der Erstellung im bin
-Verzeichnis. Für die Binärdateien sind zwei Dateien erforderlich: die eepp-Bibliothek und die SDL2-Bibliothek. Die eepp-Bibliothek befindet sich in libs/{OS}/
. Das Build-Skript versucht, die eepp-Bibliothek mit bin
zu verknüpfen. Wenn dies fehlschlägt, sollte sie manuell kopiert oder verlinkt werden. Da die SDL2-Bibliothek nicht im Repository enthalten ist, müssen Sie zum Ausführen der Demos die richtige Betriebssystemversion und Architektur der SDL2-Bibliothek herunterladen.
Die Bibliothek wird seit mehreren Jahren entwickelt und hat seit ihren Anfängen viele Änderungen erfahren. Ich nehme alle Änderungen vor, die ich für notwendig halte, um sie zu verbessern. Daher ist die API immer noch nicht völlig stabil (aber nahezu stabil). Es wird in mehreren Anwendungen für Werbekampagnen verwendet, die hauptsächlich für Android-Geräte und Windows-PCs entwickelt wurden.
Ich persönlich hatte nie die Zeit, damit ein komplexes Spiel mit der Bibliothek zu entwickeln (mehrere frustrierte Projekte), aber ich habe mehrere UI-orientierte Spiele für Kunden erstellt.
Der aktuelle Projektschwerpunkt liegt auf dem UI-Modul. Und ich werde weiter daran arbeiten und mich darauf konzentrieren.
Der Plan besteht darin, ein alternatives UI-Toolkit bereitzustellen, das vollständig hardwarebeschleunigt ist und dem Android-Toolkit ähnelt, jedoch einfacher (z. B. benutzerfreundlich) und auch auf Desktop-Apps ausgerichtet ist.
Audio- und Netzwerkmodule basierten auf den Modulen in SFML mit einigen wichtigen, oben erwähnten Unterschieden.
Ich verwende gerne das, was gut gemacht ist und meinen Bedürfnissen entspricht, aber da ich meine persönlichen Ansichten darüber habe, wie man manche Dinge umsetzt, ziehe ich es vor, den Code zu verwenden, um die volle Kontrolle darüber zu haben.
Auch viele Ideen wurden/werden aus anderen Projekten übernommen. Einige fallen mir ein: cocos2d-x , raylib , Android SDK , libGDX , Godot , XNA , LÖVE und viele andere Projekte.
Wenn das alles aus irgendeinem verrückten Grund für Sie interessant klingt, kontaktieren Sie mich und lassen Sie mich wissen, ob ich Ihnen helfen kann, in die Bibliothek aufgenommen zu werden, und wenn Sie möchten, können Sie vielleicht in Zukunft einen Beitrag dazu leisten. Dieses Projekt braucht Mitwirkende mehr als alles andere.
Der aktuelle Zustand der Bibliothek ist ordentlich. In Bezug auf die Funktionen sollte es in einer ähnlichen Position sein wie die am häufigsten verwendeten 2D-Spiele-Engines auf dem Markt. Aber es fehlt natürlich der Support+Community, den man von Godot oder cocos2d-x bekommen kann, um nur einige zu nennen.
Die Hauptidee dieser Bibliothek besteht darin, sich auf einen besseren allgemeinen Ansatz zur Entwicklung stark UI-basierter Apps und Spiele als die anderen Optionen zu konzentrieren, mit saubererem Code und saubererer Implementierung.
Der Hauptgrund, warum ich die Bibliothek entwickelt habe, ist der Spaß und das Erlernen neuer Technologien. Ich liebe es, Zeit mit der Arbeit an der Bibliothek zu verbringen, aber ich weiß, dass es angesichts der immensen Anzahl ähnlicher Alternativen wahrscheinlich keinen wirklichen Grund gibt, so etwas zu entwickeln.
Was die Codequalität betrifft: Dieses Projekt begann vor sehr langer Zeit und hat im Laufe der Zeit viele Änderungen erfahren. Ein großer Teil der Codebasis verwendet immer noch alte C++-Praktiken (z. B. Rohzeiger, eigene Thread-Implementierung, Mutex usw.). Einige dieser Dinge können „modernisiert“ werden, andere machen jedoch keinen großen Sinn oder ihre Überarbeitung würde zu viel Zeit in Anspruch nehmen, um den Aufwand zu rechtfertigen. Ich arbeite daran, einige Teile des Codes zu „modernisieren“, und neuer Code sieht normalerweise moderner aus.
Verbessern Sie das UI-System weiter, fügen Sie neue Widgets und Layouts hinzu und verbessern Sie die CSS-Unterstützung.
Vereinfachen und verbessern Sie die Skinning-/Theming-Unterstützung für UI-Widgets.
Dokumentation für das UI-Modul verbessern/erstellen.
Fügen Sie weitere Beispiele und einige Tools hinzu.
Skriptunterstützung hinzufügen, aber zuerst möchte ich die Bibliothek stabilisieren, aber ich bin am Ziel.
Fügen Sie Unterstützung für 2D-Skelettanimationen hinzu (wahrscheinlich Spine2D, die Implementierung sollte nicht viel Arbeit bedeuten).
Das Maps-Modul wird wahrscheinlich veraltet sein, da ich mich auf das UI-System konzentrieren werde.
Sean Barrett für stb_image und alle stb-Bibliotheken.
Sam Latinga für Simple DirectMedia Layer.
Jonathan Dummer für die Simple OpenGL Image Library.
Laurent Gomila für SFML
Yuri Kobets für Litehtml
Michael RP Ragazzon für RmlUI
Rxi für Lite
Andreas Kling für SerenityOS
Ryan C. Gordon für mojoAL
David Reid für dr_libs
Lion (Lieff) für minimp3 und mehr
Lewis Van Winkle für PlusCallback
Dieter Baron und Thomas Klausner für libzip
Jean-loup Gailly und Mark Adler für zlib
Milan Ikits und Marcelo Magallon für GLEW
Mikko Mononen für nanosvg
Scott Lembcke für Chipmunk2D
Christophe Riccio für glm
Rich Geldreich für Imageresampler und JPEG-Kompressor
Arseny Kapoulkine für pugixml
Jason Perkins für Premake
Martín Lucas Golini (ich) und all die verschiedenen Mitwirkenden für SOIL2 und efsw
Die Xiph-Open-Source-Community für libogg und libvorbis
Die ARMmbed-Community für mbed TLS
kcat für openal-soft
Das FreeType-Projekt
Und noch viel mehr Leute!
MIT-Lizenz