Fragen zu Tilemap

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Lakorta

Betreff: Fragen zu Tilemap

BeitragFr, Dez 03, 2010 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ein paar fragen zum Thema Tilemap:
1. Kann man ein bestimmtes Tile einer Tilemap ansprechen, so in der Art "If tile=1..." ?
2. Und wie ändert man nachträglich den Frame der Tilemaps?
3. Wenn ich jetzt die Drehung eines Spielers per Tiles mache, wie ändere ich dann die einzelnen Tiles?

Hoffe ihr könnt mir helfen Very Happy
---

Xeres

Moderator

BeitragFr, Dez 03, 2010 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du dich schon mal eingelesen, was eine Tilemap ist?
Du kannst dir das als Tabelle mit Zeilen&Spalten vorstellen - mit den X,Y Koordinaten kannst du auf eine Zelle zugreifen und nachschauen was drin ist und/oder einen neuen Wert einsetzten.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Lakorta

BeitragFr, Dez 03, 2010 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erfragt man die Koordinaten per map(x,y)?
Und wenn man keine Tilemap hat, sondern immer nur 1 Tile einzeichnen will, das sich dann ändert, wie macht man dann sowas?

Schonmal danke für die Antwort Very Happy
---

Xeres

Moderator

BeitragFr, Dez 03, 2010 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, man erfragt keine Koordinaten, die sollten bekannt sein.
Über Koordinaten bekommt man eindeutig den Inhalt eines Felds, aber anders herum - die Koordinaten zu einem Inhalt finden - geht das nicht eindeutig, wenn der Inhalt mehrfach vorkommt. Außerdem dauert das Durchsuchen der Tilemap.

Ein Einzelnes Tile gibt es nicht ohne Tilemap - das macht keinen großen Sinn. Was genau meinst du damit?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neoxit

BeitragFr, Dez 03, 2010 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Tilemap, damit befasse ich mich derzeit ziemlich dolle.
Wie Xeres schon sagte, ist eine Tilemap ein Gitterraster. 1 Tile beträgt meinetwegen 32x32 Pixel. Diese werden dann aneinander gereiht. Von Links nach rechts bspw. Jeder Tile hat dafür seine eigene Koordinate (Ausgerechnet über das 32 + 32 in schleife bei mir (da sie ja 32x32 sind)). Danach wennd ie erste reihe fertig ist setze ich den Y wert des nächsten Tiles auf 32 (also 1 reihe weiter unten) und fang nochmal bei der X koordinate bei 0 an.

Da alle diese Tiles (deren Positionen) in einem Type gespeichert werden, bei mir jedenfalls, besitzt jeder einzelne Tile der währenddessten gemacht wurde eine eigene Koordinate, bswp: 0,0 - 0,32 - 0,64 - 128,256
so wie auch andere werte (z.b. ob dieser passierbar ist durch den spieler, oder ob dieser Blocken soll)

Und genau so sprichst du die einzelnen Tiles dann auch an.
Oder habe ich dich missverstanden?

Lakorta

BeitragFr, Dez 03, 2010 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bräuchte das für die Kollision.
Neoxit, wie machst du denn deine Tilemap? Auch mit dem Data-Befehl?
---

Neoxit

BeitragFr, Dez 03, 2010 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Data Befehl habe ich in der Tat am anfang genutzt, danach umgestiegen auf eine externe Datei mit den entsprechenden Block ID's,jedoch lese ich meine Level nun anhand von Bitmaps aus.

Am besten Addest du mich mal in ICQ wenn du magst 646-149-229.
Dann kann ich dir mal besser bei deinem Problem helfen.

Helfe dir gern bei deinen Fragen, wie das ganze bei mir mit den Tiles immoment aussieht kannst du auf http://neoxit.tumblr.com/ nachlesen.

Xeres

Moderator

BeitragFr, Dez 03, 2010 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wäre vielleicht ganz sinnvoll, wenn du die schon bestehenden Tutorials verwendest - zu Tilemaps sollte es Informationen wie Sand am Meer geben.
Szene->Links->Tutorials
Tipps für Neueinsteiger
Jedem einzeln hier die Grundlagen vermitteln zu wollen ist unsinnig - bitte erst selbstständig suchen & lernen und erst dann melden, wenn noch Fragen offen sind.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Lakorta

BeitragFr, Dez 03, 2010 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub jetzt bekomm ich das hin.
Danke für die Antworten an euch beiden Very Happy
---

Raiden93

BeitragSa, Dez 04, 2010 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmal zum Oberen bereich du sprichst ein ein einzigen (Block), mit z.b map(3,15) an.

Neoxit

BeitragSa, Dez 04, 2010 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es mit einem Array machst ja, wenn du es allerdings wie beschrieben mit einem Type oder eher allgemein machst, nicht.

Hubsi

BeitragSa, Dez 04, 2010 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich nicht nachvollziehen kann, Neoxit, wie gestaltest Du die Kollisionen mit der Map performancegünstig wenn das ganze in einem Typekonstrukt gespeichert wird? Ich hab bisweilen die Map noch immer in einem Array gespeichert und im einfachsten Fall anhand der Tilenummer (also z.B. 1 - 500 ist nicht begehbar, 501 - 700 sind Powerups, etc.) entschieden wie Spieler oder KI sich bewegen können. Bei Types fehlt mir ein wenig die Vorstellungskraft wie man das Prozessor- und Speicherschonend gestalten könnte, von daher die Frage?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neoxit

BeitragSa, Dez 04, 2010 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommt halt darauf an wie oft du alle Types ansprichst und je nach dem wie groß die Map ist.

Meine Typekonstruktion sieht derzeitig so aus:

BlitzBasic: [AUSKLAPPEN]

Type TLevel
Field id,x,y,img,frame,name$,live,passable,mineable,growable,drop,drop_menge,toolaffect,blockreact
End Type


Wobei jeder eine ID bekommt wobei ich diese für andere Dinge anspreche. D.h. wenn du die Tiles "nur" für die Kollision ansprichst geht das. Zusätzlich werden NUR die Tiles gezeichnet, welche sichtbar sind. (der spieler sieht).

Also gibt es auch mit der Type variable viele verschiedene möglichkeiten die Performance am leben zu erhalten.

[EDIT]
Also werden auch nur die Types geprüft die gezeichnet werden und das sind bei mir bei 1024x768 mit 32x32 tiles 768 tiles die angesprochen statt laut map 10.000 bei einer karte von 100x100 tiles

Eingeproggt

BeitragSa, Dez 04, 2010 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs mit einer alt bewährten Kombination?
Einem Ansatz wie zB:

BlitzBasic: [AUSKLAPPEN]
Type TLevel
Field id,img,frame,name$,live,passable,mineable,growable,drop,drop_menge,toolaffect,blockreact
End Type

Dim map.TLevel(100,100)


Dem aufmerksamen Leser fällt auf: Es ist ein gewohnter Tilemap-Array wo man Koordinaten hat wie in diesem THread besprochen und jeder Eintrag verweist auf einen Type-Eintrag der die Infos enthält ob er begehbar ist, zerstörbar, etc.
Man bräuchte dann auch nicht 10.000 Type-EInträge sondern nur "für jeden Typ einen".

mfG, Christoph.

EDIT: Hätte ich n halben Tag gewartet, hätte man den Vorschlag als Adventsüberraschung gefunden Razz
https://www.blitzforum.de/news/advent/?day=5
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
  • Zuletzt bearbeitet von Eingeproggt am So, Dez 05, 2010 1:21, insgesamt einmal bearbeitet

Hubsi

BeitragSa, Dez 04, 2010 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun gut, so recht scheine ich den Vorteil nicht zu verstehen. Vielen Dank für die Erläuterung Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group