AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DelphiX] Iso-Engine von der Theorie zur Praxis
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Iso-Engine von der Theorie zur Praxis

Ein Thema von Igotcha · begonnen am 23. Jan 2004 · letzter Beitrag vom 29. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

[DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 15:54
Hallo zusammen,

nachdem ich mich über Iso-Engines eingelesen habe, möchte ich solch eine nun mit DelphiX realisieren.

Welche Eigenschaften soll die Engine haben:

- Isometrische 2D-Engine
- multilayer (also mehrere Ebenen)

Hierzu habe ich folgende Fragen zur Umsetzung:

1. Da durch die multilayer-Eigenschaft die Spielfiguren auch z.B. hinter einem Objekt (Haus, Baum, etc.) verschwinden und bei z.B. Zäunen durchscheinen sollen, kann ich nicht direkt auf der DXDraw-Surface zeichnen, da ich ja verschiedene Z-Werte von "Hintergrund" und den Figuren-Sprites berücksichtigen muß.

2. Deshalb denke ich, dass ich den Background mit Sprites aufbauen muß. TBackgroundSprite fällt in meinem Fall aus, da es sich um Iso-Tiles handelt und dieser nur rechteckige "Chips" zulässt.

3. Aus diesem Grund bin ich jetzt bei TImageSprites angelangt, die ich selbst zeichne, bzw. deren Koordinaten ich entsprechend der Scrollrichtung (Himmelsrichtungen) verändere.

Bin ich hiermit erstmal überhaupt auf der richtigen Fährte oder gar ganz auf dem falschem Dampfer?

Wenn das soweit OK sein sollte, habe ich mir nun folgendes gedacht:

- da ich bei einer Spielfläche von z.B. 1000x1000 Tiles á 64x32 Pixel nicht 1.000.000 Sprites erstellen will, zeichne ich nur soviel Sprites, wie nötig sind, den Bildschirm zu füllen plus 1-2 Pufferreihen an jeder Seite.
- wenn jetzt das Spielfeld 64 Pixel in eine Richtung gescrollt wurde, "swappe" ich die aktuellen Bilder des Map-Arrays in die am Bildschirm angezeigten Sprite und setze sie wieder um 64 Pixel zurück - es wird als0 tatsächlich immer nur maximal 64 Pixel in X-Richtung und 32 Pixel in Y-Richtung gescrollt und dann werden die eigentlich neu kommenden Tiles in der Sprite-Matrix ersetzt und diese wieder um 64 bzw. 32 Pixel zurückgesetzt.

Ist das ein "guter" Ansatz, um die Theorie zu realisieren?

Bin für alle Umsetzungstips dankbar!

Gruß Kay
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 17:42
http://www.minfos.de/wissen/iso.html
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 18:13
Danke Dir, aber das bringt mich bei meinem Problem nicht weiter - außerdem kannte ich die Seite schon.

Wie gesagt, über die Theorie habe ich bereits einiges gelesen, aber ich habe bestimmte Anforderungen (s.o.) und dazu o.g. Fragen zur technischen bzw. Umsetzungsseite.

Gruß Kay
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#4

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 18:52
Hallo Igotcha,

soweit ich weiß ist das mit dem Hintergrund auf der Seite, die Gandalfus angibt, so geregelt, dass du insgesamt zwei TBackgroundSprites hast. Stell dir ein Schachbrett Isometrisch dargestellt vor. wenn du jetzt nur die Weißen Felder betrachtest, dann kannst du diese mithilfe eines TBackgroundSprites darstellen, denn sie überlappen sich nicht. So wurde das dort umgesetzt. Das funktioniert allerdings nicht, wenn du mehrere Layers hast.

Ich habe die Erfahrung gemacht, dass TImageSprites recht langsam sind. Ich würde empfehlen, alle Graphiken mit
DxImageList1.Items[n].Draw darzustellen. Die Sprites würde ich nur benutzen, wenn du die Kollisionsabfrage brauchst. Falls du Sprites benutzt, dann brauchst du auch nicht die Koordinaten jedes einzelnen Sprites zu ändern. Es gibt bei der Spriteengine die Eigenschaft
Delphi-Quellcode:
DxSpriteEngine1.Engine.X
// bzw.
DxSpriteEngine1.Engine.Y
Damit kann man alle Sprites der SpriteEngine verschieben.

Zu dem Mulitlayerproblem:
Fange in der Zeile ganz oben an und zeichne den untersten Layer, dann die nächsten Layer für diese Zeile (!!!). Dann kommt die zweite Zeile dran usw. Das ist eigentlich nicht so schwierig.

Grüße
Seniman
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 20:39
Zitat von Seniman:

Zu dem Mulitlayerproblem:
Fange in der Zeile ganz oben an und zeichne den untersten Layer, dann die nächsten Layer für diese Zeile (!!!). Dann kommt die zweite Zeile dran usw. Das ist eigentlich nicht so schwierig.
Das war mir schon klar, aber das dient ja eigentlich der Darstellung des Backgrounds. Wenn ich das aber mit

DxImageList1.Items[n].Draw mache, dann bekomme ich es doch aber nicht hin, dass z.B. das Playersprite hinter eine Baum läuft, da ich ja für das Draw keinen Z-Wert angeben kann (oder doch???) und somit nicht identifiziert werden kann, dass das Bild wie folgt aufgebaut wird (Sicht von hinten nach vorne aufgebaut):

a) normaler Hintergrund
b) PlayerSprite
c) Baum

Also der Baum vor dem Player (dieser scheint an den transparenten Bereichen des Baums durch) steht und der Player vor dem normalen Hintergrund.

Gruß Kay
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#6

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 23. Jan 2004, 23:30
Zitat von Igotcha:

Das war mir schon klar, aber das dient ja eigentlich der Darstellung des Backgrounds. Wenn ich das aber mit

DxImageList1.Items[n].Draw mache, dann bekomme ich es doch aber nicht hin, dass z.B. das Playersprite hinter eine Baum läuft, da ich ja für das Draw keinen Z-Wert angeben kann (oder doch???) und somit nicht identifiziert werden kann, dass das Bild wie folgt aufgebaut wird (Sicht von hinten nach vorne aufgebaut):

a) normaler Hintergrund
b) PlayerSprite
c) Baum

Also der Baum vor dem Player (dieser scheint an den transparenten Bereichen des Baums durch) steht und der Player vor dem normalen Hintergrund.
Die Problematik ist mir schon klar. Und so wie ich es meinte, war es auch richtig. Vielleicht habe ich es nicht vernünftig formuliert. Also ich meine nicht, dass du zuerst den untersten Layer (1) komplett zeichnest, dann (b) und dann (c), sondern, dass du in der hintersten (auf dem Bildschirm obersten) Zeile zuerst alle drei Layers zeichnest, dann in der zweiten Zeile usw.
Wenn nun der Baum weiter vorn steht als die Spielfigur, dann wird er nach dieser Methode auch später gezeichnet und überdeckt die Figur gegebenenfalls teilweise. Habe ich mich nun verständlich ausgedrück?

Grüße
Seniman
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#7

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 24. Jan 2004, 11:02
Zitat von Seniman:
Wenn nun der Baum weiter vorn steht als die Spielfigur, dann wird er nach dieser Methode auch später gezeichnet und überdeckt die Figur gegebenenfalls teilweise. Habe ich mich nun verständlich ausgedrück?
Ja, das war die bereits von mir zitierte Theorie

Ich möchte mein Spieler-Sprite - und natürlich auch meine Gegner, interaktive Objekte, etc. - aber nicht "Drawen", sondern als richtiges "Sprite" über die SpriteEngine darstellen, damit diese z.B.

- selbstständig animiert werden,
- automatisch auf bestimmte Ereignisse reagieren, z.B. Kollisionen

Und wenn ich Sprites über die SpriteEngine verwende, kann ich in den Aufbau des Hintergrunds, wie von Dir beschrieben nicht eingreifen - sofern ich den Hintergrund nicht ebenfalls durch Sprites darstelle. Denn nur durch Sprites habe ich die Möglichkeit, Z-Koordinaten zu nutzen, um festzustellen, ob ein Objekt vor oder hinter einem anderen ist, bzw. dies zu setzen.

Oder: Bestimmte Ebenen des Hintergrunds werden tatsächlich "gedrawt" und andere Sprite-Objekte werden zusätzlich verwendet, um den Hintergrund zu komplettieren.

Beispiel:

- per Draw eine Grasfläche zeichnen
- davor einen Zaun als Sprite
- dann den Spieler als Sprite, der sich je nach Z-Wert vor oder hinter dem Zaun befinden kann.

Gruß Kay
  Mit Zitat antworten Zitat
godman

Registriert seit: 25. Mai 2003
25 Beiträge
 
#8

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 24. Jan 2004, 20:26
Also ich kann dir nur raten versuch es mit einen Komponenten od. anderen Engine für Delphi! Mit Delphix hab ich das auch net hin bekommen! Kann da nur raten die Turbosprite Komponenten kosten zwar um die 70 - 90 Euro, aber da hast du alles was du brauchst! Ich verwende Turbosprite und kann dir sagen die Delphix ist schwach und kann viele sachen scheinbar überhaupt net! (http://www.silicmdr.com/TurboSprite.htm)

MFG

Martin
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#9

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 26. Jan 2004, 21:58
Ich bin mir nicht ganz sicher ob ich dein Problem richtig verstehe aber ich würde an deiner Stelle Hintergrund (Boden / Sprite oder direkt "drawen") und Vordergrund (Bäume,... / Auch Sprites) unterscheiden.

Was spricht den hier gegen ein Array [0..100, 0..80] of Sprite für den Hintergrund (z = 0) und das gleiche mit z = 2 für den Vordergrund (z=1 für den Spieler)?
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#10

Re: [DelphiX] Iso-Engine von der Theorie zur Praxis

  Alt 27. Jan 2004, 13:15
Zitat von Flogo:
Ich bin mir nicht ganz sicher ob ich dein Problem richtig verstehe aber ich würde an deiner Stelle Hintergrund (Boden / Sprite oder direkt "drawen") und Vordergrund (Bäume,... / Auch Sprites) unterscheiden.

Was spricht den hier gegen ein Array [0..100, 0..80] of Sprite für den Hintergrund (z = 0) und das gleiche mit z = 2 für den Vordergrund (z=1 für den Spieler)?
Doch, Du hast mein Problem genau verstanden

Alles, was ich bisher über ISO-Engines gelesen habe geht auf dieses Problem aber nicht ein, sondern beschäftigt sich hauptsächlich damit, wie man Hintergründe zeichnet - Anforderungen, die sich aus dem Spiel selbst ergeben, werden dort nicht behandelt.

Wie Du in meinem Ausgangspost siehst, war ich bei meinen Überlegungen genau bei Deinem Vorschlag angelangt, hatte jedoch technische Fragen zur Umsetzung bzgl. evtl. Performanceprobleme. Bei Deinem Array (s.o.) wären das mal locker 8.000 Sprites, wenn das gesamte Spielfeld so abgebildet werden würde - deshalb meine o.g. Frage bzgl. eines "swapping" bei konstanter Spriteanzahl von "BenötigteAnzahlSpriteszurFüllungeinesScreens x Layeranzahl".

Gruß Kay
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:28 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