C++ Linie mittels windows.h auf ein Display zeichnen?
Hallo!
Ich habe vor in C++ in VS Code mit windows.h ein Display zu erstellen, was mir bereits gelungen ist. Allerdings wollte ich fragen, wie ich es schaffe z.B. eine Linie in dieses Fenster zu zeichnen?
Außerdem:
Wie kann ich in VS Code einen bestimmten Error ignorieren, sodass dieser nicht unterstrichen wird?
Vielen Dank!
1 Antwort
Allerdings wollte ich fragen, wie ich es schaffe z.B. eine Linie in dieses Fenster zu zeichnen?
Schau dir GDI+ an (GDI+: Drawing a line).
Wie kann ich in VS Code einen bestimmten Error ignorieren, sodass dieser nicht unterstrichen wird?
Das Intellisense-Feature für die VS Code Microsoft C/C++-Extension richtet sich nach der Konfiguration, die in der c_cpp_properties.json steht, die Warnungen und Fehler bezieht es von dem eingerichteten Compiler.
Das heißt, du müsstest zum einen schauen, welche Flags dein Compiler unterstützt, um Warnungen zu unterdrücken (Beispiel GCC: Wno-Form, erklärt in der Dokumentation) und dann, ob diese über die JSON-Konfigurationsdatei als Argumente an den Compiler mitgeben kannst. Wie du die JSON-Datei bearbeiten kannst, wird hier erklärt und wie sie sich aufbaut, hier.
Also für so einfache Angelegenheiten wie das Zeichnen einfacher, statischer Strukturen (Linien, Rechtecke, u.ä.) ist GDI+ zwar noch eine einfache Wahl, aber sobald es beispielsweise darum geht, flüssige Animationen zu erstellen, kannst du bereits auf Probleme stoßen. Die Entwicklung von Spielen wird da mehr zum Gefrickel. Da gibt es dann doch bessere Optionen mit besserer Performance, besseren Renderingoptionen und einem größeren Funktionsumfang.
Für 2D-Spiele kannst du mit Cocos2d-x, raylib, SDL2 oder SFML2 arbeiten. Die können neben dem Zeichnen zugleich noch andere notwendige Funktionalitäten (wie Input-Handling, Audioausgabe, u.ä.) handhaben. In dieser Liste sind raylib und SFML2 wohl am leichtesten zu erlernen. Die Cocos2d-x-Engine sticht dabei heraus, mehrere Zielplattformen zu unterstützen.
Wäre SDL2 und OpenGL eine gute Kombi? OpenGL soll meines Wissens nach ebenfalls Plattformübergreifend sein (korrigiere mich falls ich falsch liege), und ich lerne ehrlich gesagt lieber eine kompliziertere Bibliothek, wenn ich damit auch mehr (z.B. 3D Spiele programmieren) anfangen kann. Ich möchte nicht mit möglichst kleinen Bibliotheken arbeiten wenn ich bei komplizierteren Projekten gleich was neues lernen muss. Mit OpenGL kann man meines Wissens nach 2D und 3D rendern.
Wäre SDL2 und OpenGL eine gute Kombi?
Für 2D-Spiele ja, sonst hätte ich sie oben nicht aufgeführt.
Um 3D-Graphiken zu rendern, müsstest du in dem Fall einen eigenen Renderer implementieren, dich also direkt mit OpenGL auseinandersetzen, denn SDL beinhaltet keine Hilfsfunktionen dafür. Das ist allein aufgrund des Aufwands allerdings nichts, was ich empfehlen würde. Umso tiefer die Ebene ist, auf der du ansetzt, umso mehr entfernst du dich von deinem eigentlichen Ziel, in naher Zukunft Spiele zu entwickeln. Besser ist es mit Frameworks/Bibliotheken zu arbeiten, die für OpenGL/Vulkan/o.ä. eine vereinfachte Schnittstelle anbieten.
In cocos2d-x gibt es auch einen 3D-Support. Das Framework ist größtenteils auf die Implementation relativ kleiner Spiele (bspw. für mobile Endgeräte) spezialisiert. Schau dir am besten einen Showcase an, um eine ungefähre Vorstellung davon zu bekommen.
Andernfalls gibt es (vorrangig) auf 3D spezialisierte Engines wie Flax, OGRE und natürlich die Unreal Engine, mit denen sich komplexere Spielideen umsetzen lassen. Die letztgenannte Engine bietet in dieser Auswahl den größten Funktionsumfang und besten Support.
(...) ich lerne ehrlich gesagt lieber eine kompliziertere Bibliothek, wenn ich damit auch mehr (...) anfangen kann (...)
Eine Spezialisierung auf das, was man tatsächlich für sein Endprodukt braucht, macht schon Sinn. Du kannst zwar alles mit einer 3D-Engine umsetzen, hast dann aber tendentiell einen unnötigen Overhead.
Vielen Dank ich werde das ausprobieren!
Sollte ich nach meinem jetzigen Projekt ein 2D Videospiel programmieren wollen, eignet sich Windows.h und GDI+ dann ebenfalls dafür bzw. wird der Programmcode im Vergleich zu einer Engine langsamer ausgeführt? Falls ja welche Engine wäre da später empfehlenswert?