Seite 2 von 3

Re: TileEngine. Wie funktionierts

Verfasst: 17.06.2010 12:00
von PureLust
Wie wohl vermutlich jeder hier (ausser ts-soft vielleicht :mrgreen: ) hatte auch ich mal angefangen eine Tile-Engine zu schreiben (hier mal eine uralte erste Demo davon).

Bild

Das geplante Konzept sah sowohl Unterstützung für verschiedene ISO-Ansichten wie auch für 2D-Draufsicht vor.
Auch waren mehrere Layer sowie frei bewegliche Tile-Objekte angedacht.
Wie viel wir (PeBo und ich) damals davon noch tatsächlich umgesetzt hatten kann ich nicht mehr genau sagen.
Bei Interesse schau ich aber gerne noch mal nach ob ich noch irgendwo den Source habe. ;)

Greetz, PL.

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 12:37
von Codusa
@PureLust
Wäre echt cool thx!
Demo kann ich leider nicht testen, da Norton sie raushaut
@a14xerus
Eine Frage habe ich noch:
Wie fülle ich das Map-Array mit den Tiles?

Code: Alles auswählen

  For k = startY To endeY
    For i = startX To endeX
      Map(i, k)\Layer1 = #GrassTile
    Next
  Next
"Array-Index ausserhalb der zulässigen Grenzen"

Wollte zum Testen mal GrassTiles anzeigen lassen...

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 13:45
von hörmi

Code: Alles auswählen

For k = startY To endeY
  For i = startX To endeX
    If i<ArraySize(Map(),1) And i>=0
      If k<ArraySize(Map(),2) And k>=0
        Map(i, k)\Layer1 = #GrassTile
      EndIf
    EndIf
  Next
Next
  

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 13:50
von Codusa
hörmi hat geschrieben:

Code: Alles auswählen

For k = startY To endeY
  For i = startX To endeX
    If i<ArraySize(Map(),1) And i>=0
      If k<ArraySize(Map(),2) And k>=0
        Map(i, k)\Layer1 = #GrassTile
      EndIf
    EndIf
  Next
Next
  
Ich versteh nicht wirklich wo der Fehler lag, aber er ist wech :D

DANKE :allright:

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 14:13
von hörmi
dein startx/y kann negative werte annehmen bzw endex/y kann größer werden als dein Array groß ist und deshalb musst du überprüfen ob dein k und i innerhalb der grenzen ist

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 14:24
von Codusa
Ok, danke nochmal!

Weisst du wie ich den unschönen Effekt weg bekomme, dass die Tiles wenn sie sich überlappen nur teilweise transparent sind?
Ich beutze ja Rauten...

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 14:52
von hörmi
Ich weiß nicht genau was du meinst, hast du vll ein beispiel

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 15:44
von NicTheQuick
Dazu musst du z.B. 'DisplayTransparentSprite()' verwenden und den Teilen des Bildes, die durchsichtig sein sollen, die festgelegte Transparenz-Farbe geben.

Ich glaube es gibt auch noch Masken oder noch einfacher die Verwendung von PNG-Bildern mit Alpha-Kanal. Aber ich habe das selbst nie wirklich benutzt. Deswegen werden sicherlich noch ein paar Antworten von den Experten hier kommen.

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 16:20
von Codusa
Ein Beispiel habe ich leider nicht (Screenshot geht auch nicht /:-> )
Ich benutze Sprite3D und es ist auch Transparent nur an den Stellen nicht , wo sich zwei Transparente Flächen
von den Sprites überlappen...

Hoffe es ist so verständlicher.
Könnte das was mit Sprite3DBlendingMode() zu tun haben?
Ich kenn mich da leider nicht aus, probier aber Heute Abend mal die verschiedenen Modi aus.

Re: TileEngine. Wie funktionierts

Verfasst: 20.06.2010 16:40
von a14xerus
muss ja nich iso sein.
also nich diagonal, kannst ja auch rechteckige "normale" tiles machen. dann gibt es keine überlappenden stellen.
also warum das jetzt bei dir nicht funktioniert mit der transparenz weiß ich nich ;)

@ tiles zum test füllen:
fülle nicht in dieser schleife die tiles. das is quatsch ;)

fülle einfach beim laden des spiels einmal das ganze array.
so wie du es jetzt machst überschreibst du vorm zeichnen (diese for k = startX to endeX - schleife ist nur fürs zeichnen zuständig) alles das , was dann angezeigt wird.
udn daher auch der Fehler (wie schon geschrieben musst du überprüfuen ob der anzuzeigende bereich überhaupt im bereich der map (des arrays) liegt).