Einzelnen Beitrag anzeigen

Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: Vorschläge für Grafische 2D welt

  Alt 9. Jul 2015, 08:18
Dafür musst du dir eine kleine auf dein Spiel angefertigte Engine basteln, die das für dich übernimmt.

Zuersteinmal hat jedes Element fürs zeichnen X/Y Koordinaten(Spieler, Hintergrundelemente, Vordergrundelemente). Ein element sollte kein TImage kapseln, sondern eher ein TBitmap. Wenn du ein Element Zeichnest, zeichnest du es aktuell ausgehend von der oberen Linken Kante des Bildschirms. Besser ist es:

Du definierst eine Klasse namens TView. Im einfachsten sinne beinhaltet TView einen 2D Vector (TPoint) für die Position der View in deiner Welt sowie die Höhe/Breite. Gezeichnet wird so:

Delphi-Quellcode:
for Element in Elements do
begin
  Canvas.Draw(Element.X - View.X + View.Width div 2, Element.Y - View.Y + View.Height div 2, Element);
end;
Die Daten der View werden benutzt um Offsets auf die Positionen der Elemente aufzurechnen.

Das hat mehrere vorteile:

1) Dein System behandelt alle zu zeichnenden Elemente Gleich. Was dass ist, ist erstmal egal.
2) Das System ist nicht an den Spieler gebunden. Soll die View dem Spieler folgen, muss die Position der View vor jedem Zeichnen einfach auf die Position des Spielers gesetzt werden.
3) Wenn du den Canvas als Property deiner View definierst(Willkommen bei Rendertargets), kannst du der Zeichen routine verschiedene Views übergeben und sie zeichnet die Welt in verschiedene Views mit verschiedenen Positionen. Splittscreen Multiplayer gefällig?

PS: Beachte dass ich bei meinen Kalkulationen immer von einem 0-Punkt in der Mitte des Bildschirms ausgehe. Dies erreiche ich, in dem ich die Halbe dimension(Höhe, Breite) dazurechne. Das führt dazu, dass wenn die View an XY(0,0) steht und der spieler an X/Y(0,0) steht, dieser in der mitte des Bildschirms ist.


Soweit zu meinem Crashcurs^^
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch ( 9. Jul 2015 um 08:26 Uhr)
  Mit Zitat antworten Zitat