AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vorschläge für Grafische 2D welt

Offene Frage von "CHackbart"
Ein Thema von C00D3R4TIV · begonnen am 8. Jul 2015 · letzter Beitrag vom 9. Jul 2015
Antwort Antwort
C00D3R4TIV

Registriert seit: 5. Jun 2015
3 Beiträge
 
#1

Vorschläge für Grafische 2D welt

  Alt 8. Jul 2015, 23:19
Hall0
bisher habe ich 2D Welten immer so programmiert das im Hintergrund sich ein image_Hintergrund befindet und darauf bewegt sich image_Spieler jedoch ist dann die Welt nur auf die Fenstergröße reduziert.

Ich möchte jetzt die Grenzen erweitern ^.^


// Mein Aktueller Stand
image_hintergrund .Top / Left := image_hintergrund + - Etwas;

dabei kann man eine super große "Welt" erstellen, jedoch das folgende Problem ist!
sobald ein weites image_nps vorhanden ist bleibt es auf dem Fenster genauso stehen wie image_Spieler mit anderen Worten die Distanz zum anderem nicht Hintergrund image und dem image_Spieler verändert sich nicht beim laufen.

Jetzt die Frage
Gibt es eine Variante wie ich eine 2D-Welt für spiele in Delphi/Lazarus erstellen kann ?
oder muss ich fuer jedes weiter imageNps einen code schreiben damit er sich der Welt anpasst ?


Habe schon ganz oft überlegt alle images mit image_Hintergrund (außer dem imagespieler) zu "verbinden" sodass sie sich harmonisch mit dem hintergrund mitbewegen und dazu noch ihre eigene Bewegung besitzen.
  Mit Zitat antworten Zitat
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, 09: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 09:26 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 9. Jul 2015, 09:48
Oder man nimmt etwas "Fertiges" wie Andorra2D, ZenGL, Terra, Quad o.ä.
Markus Kinzler
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#4

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

  Alt 9. Jul 2015, 12:46
Du kannst ja hier mal gucken: http://www.fmxexpress.com/free-minic...droid-and-ios/

Abgesehen von diversen Memoryleaks funktioniert das prima.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz