C++ Linie mittels windows.h auf ein Display zeichnen?

FaTech  08.03.2024, 18:20

Wenn du sagst Display, denke ich an den Monitor und den erstellt man nicht, der steht fertig vor dir. Meinst du ein Windows Fenster?

Pixie633 
Fragesteller
 09.03.2024, 07:07

Ja ich meine ein leeres Windowsfenster in das ich gerne Linien zeichnen würde.

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.

Pixie633 
Fragesteller
 09.03.2024, 07:18

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?

0
Pixie633 
Fragesteller
 09.03.2024, 07:24
@Pixie633

Bei den ganzen Engines bin ich nämlich ziemlich aufgeschmissen und habe keine Ahnung was jetzt am nützlichsten ist. :/

0
regex9  09.03.2024, 10:30
@Pixie633

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.

0
Pixie633 
Fragesteller
 09.03.2024, 15:53
@regex9

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.

0
Pixie633 
Fragesteller
 09.03.2024, 16:08
@Pixie633

Oder sollte ich Vulkan statt OpenGL wählen, da es noch mehr low level ist? Ich weiß, dass es deutlich komplizierter ist, aber lieber lerne ich Vulkan gleich anstatt später umzusteigen.

0
regex9  10.03.2024, 14:08
@Pixie633
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.

0