TileEngine. Wie funktionierts

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: TileEngine. Wie funktionierts

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

Re: TileEngine. Wie funktionierts

Beitrag 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...
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: TileEngine. Wie funktionierts

Beitrag 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
  
BildBild Bild
Benutzeravatar
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

Re: TileEngine. Wie funktionierts

Beitrag 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:
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: TileEngine. Wie funktionierts

Beitrag 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
BildBild Bild
Benutzeravatar
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

Re: TileEngine. Wie funktionierts

Beitrag 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...
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: TileEngine. Wie funktionierts

Beitrag von hörmi »

Ich weiß nicht genau was du meinst, hast du vll ein beispiel
BildBild Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: TileEngine. Wie funktionierts

Beitrag 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.
Benutzeravatar
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

Re: TileEngine. Wie funktionierts

Beitrag 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.
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Re: TileEngine. Wie funktionierts

Beitrag 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).
Antworten