brauche Starthilfe

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    brauche Starthilfe

    Hallo Leute,

    Ich habe letztes Jahr mithilfe von vb.Net, GDI+, einem TCP Client/Server und ein paar Sprites ein 2D- Towerdefense Multiplayer Spiel gebaut. Am Ende waren es jedoch zu viele Sprites und es wurde lahm, was wahrscheinlich an GDI+ lag nehme ich mal an.

    So blöd wie ich bin, habe ich Windows zurückgesetzt ohne das Spiel irgendwo zu sichern. Jetzt würde ich es gerne erneut programmieren, jedoch mit einer anderen "Engine", sodass es einfach flüssiger läuft und von der Grafikkarte gerendert wird und nicht von der CPU. Es soll 2D bleiben (Sicht von oben halt..)

    Ob VB oder C# ist mir eigentlich egal.

    Ich habe mir SharpDX und SharpGL mal angeguckt und ausprobiert. Ich komme damit überhaupt nicht zurecht, das ist etwas total neues, bitte nicht bös sein. In den Tutorials wurden immer Dreiecke oder Linien gemalt, das habe ich noch hinbekommen.

    Aber sobald es dann an die Bitmaps geht, bin ich aufgeschmissen. Ich sehe über 20 Zeilen Code pro Bitmap und habe es jetzt stundenlang versucht. So peinlich es auch klingt, ich habe einfach kein Bild in mein Programm einbauen können. Bei den Tutorials wird nicht richtig auf das eingegangen, was ich gebrauchen kann. Falls doch, verstehe ich es wohl nicht.

    Wäre cool wenn mir einer dabei helfen kann. Ich muss eigentlich nur meine Bilder laden und verstehen, wie genau ich die Update-Logik am effektivsten implementiere. Den Rest bekomme ich dann vermutlich alleine hin
    :saint:
    Ich kenn mich jetzt mit SharpGL nicht aus, sondern eher mit OpenTK(Welches vermute ich mal auch etwas weiter fortgeschritten ist)

    Erst mal musst du eine Textur Laden können und diese dann mit einem Quad zeichnen(ein Quad zeichnet man normalerweiße mit 2 Dreiecken, hier wird aber eine veraltete Methode zum Zeichnen über die Fixed Pipeline verwendet(ist nur noch aus Kompatibilitätsgründen vorhanden):
    deathbyalgorithm.blogspot.de/2013/05/opentk-textures.html
    Ob du nachher OpenTK oder SharpGL verwendest dürfte ziemlich irrelevant sein, da beides LowLevel APIs sind und somit relativ einfach zu übersetzen sein sollten.

    Also das Quad das du nachher zeichnest solltest du anders machen und zwar mit einem VBO und einem IBO. Außerdem wirst du dann noch einen Shader brauchen, mit welchem du das Texturing vornimmst(und iim VertexShader auch die Positionierung).
    Da die OpenTK Seiten grad irgendwie Down sind:
    lazyfoo.net/tutorials/OpenGL/1…_vertex_buffers/index.php

    Auch von C/C++ ist es nicht sehr kompliziert zu übersetzen.

    In SharpDX wird man vom Prinzip her ähnlich vorgehen, DX sollte aber z.B. Bilder direkt selbst laden können(ist aber evtl. etwas einfacher - aber nicht plattformunabhängig).

    Optimierungen würden dann später hinzukommen, bei denen man vertexbuffer für statische dinge auf einmal erstellt, oder einen TexturAtlas/TextureArray verwendet. SpriteBatching etc...

    Wenn dir das alles zu Kompliziert ist dann empfehle ich dir etwas anderes zu verwenden:
    -MonoGame.
    -SFML
    -oder auch meins *Werbung* github.com/jvbsl/engenious/
    gibts auch als nuget, was wohl das sinnvollste wäre, jedoch muss ich dich warnen, es funktioniert noch nicht alles perfekt e.g. FontRendering(meine Font ist dann zwar nachher smoother, aber hat noch etwas probleme mit spacing/kerning etc. aber trotzdem bereits verwendbar) es ist nicht 1:1 XNA oder MonoDevelop, es mimt diese nur der einfachheit halber. Vorteil meiner Engine ist, dass man Shader Problemlos Platformunabhängig schreiben kann, da es direkt GLSL ist und nicht von nem kaputten converter konvertiert werden muss(MonoGame). In einem Branch hier wird diese bereits erfolgreich verwendet: github.com/OctoAwesome/octoawesome

    Für 2D sieht die Verwendung ziemlich gleich zu MonoGame/XNA aus, was es einfach macht, da es dafür verdammt viele Tutorials gibt. Suchbegriff wäre dann SpriteBatch.

    Auch wenn du dich für die erste Methode entscheidest, bei Problemen einfach hier nochmal posten, denn ich denke nicht, dass du auf Anhieb Problemlos durch kommst^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Du machst doch 2D, das juckt niemanden :D
    Klar mit direktzugriff kann man besser optimieren und MonoGame ist für OGL wirklich suboptimal implementiert(aber für DirectX ganz akzeptabel).

    Aber wie gesagt für 2D hast du noch so viel Resourcen über, da macht der MonoGame overhead auch nichts, wenn es von der Leistung nicht reichen sollte, dann liegt das daran, dass du es falsch benutzt hast.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wenn du eine Engine suchst, dann probier mal Sharpex2D aus. Hier kannst du recht einfach Szenen dir bauen mit allerlei Animationen, KeyFrames und so weiter
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell