Frage zu TileMap-Geschwindigkeit

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Myn

Betreff: Frage zu TileMap-Geschwindigkeit

BeitragSo, März 20, 2011 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich habe mal eine Frage zum Thema Tile Map, die auch nicht durch die
Forensuche geklärt werden konnte...

Ist es für Blitz einfache in großes Bild zu zeichnen (ca. 7000*5000)
oder alles per TileMap einzeln... ? Für was braucht Blitz länger...?



mfg
Myn

Xeres

Moderator

BeitragSo, März 20, 2011 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt darauf an, wie man es optimiert.
Allerdings würde ich von Bild-als-Level Lösungen steht's abraten. Dein Bild würde 133 MB Speicher brauchen. Selbst das ausgefeilteste Tileset kommt niemals auf solche Werte. TileMaps sind klein, einfach zu handhaben und gut strukturiert.
Benutze eine TileMap.
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)
 

Lador

BeitragSo, März 20, 2011 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Kollisionen sind mit einer Tilemap auch viel, viel einfacher umzusetzen.

MFG Lador
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%

Dottakopf

BeitragSo, März 20, 2011 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann dir auch nur Tile Maps raten!
Beim ersten mal durchlesen klingt das Tile map system evt. etwas verwirrend.
Aber es ist total simpel, und verdammt schnell !

Zudem lassen sich maps mit Tile map Editoren schnell zusammenklicken und bearbeiten.


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Myn

BeitragSo, März 20, 2011 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, habe mich nun mit diesem Toturial beschäftig.
Code: [AUSKLAPPEN]
;RPG-Tutorial3 Scrolling

;dieses tuturial is wohl das einfachste dass, dass jehmals gekommen ist und
;kommen wird und zwar behandelt es dass scrolling, man muss nur in der
;for-next-schleife zum karten malen bei dem drawimage die variablen
;scrollx und scrolly von x und y abziehen also ganz einfach.
;da dass meiner meinung nach die einfachste und beste methode des scrollings ist
;werde ich diese auch benutzen.
;sie functioniert folgendermaßen wenn man auf eine pfeiltaste drückt
;bewegt sich der spieler und die karte scrollt(einfach und schön)
;z.B. Pokemon nur dass dieses spiel eine andere sorte von bewegung benutzt.


;CODE


Graphics 640,480,16,1

;tileset
tileset = LoadAnimImage("tileset.bmp",32,32,0,6)
;figur
char = LoadImage("char.bmp")

;px Variable des Spielers
px = 10
;py Variable des Spielers
py = 7
;Direckt move = 1 damit die Figur auch am Anfang sichbar ist
move = 1

;die map-array
Dim map(20,20)

;die Karte
; 0 = wiese
; 1 = sand
; 2 = feuer
; 3 = wasser

Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,5
Data 5,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,5
Data 5,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5


;einlesen und die zahlen der Tiles in der array speichern
For y = 0 To 20
For x = 0 To 20
Read map(x,y)
Next
Next

Repeat
SetBuffer BackBuffer()
Cls
If KeyDown(1) Then End

;malt die karte. Die auf der map gespeicherten zahlen einfach als framezahl des tilesets nehmen 
;-scrollx/y heißt einfach, dass die karte gemalt wird dabei aber die veränderbaren variablen
;scrollx und scrolly abgezogen werden
For y = 0 To 20
For x = 0 To 20
DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y)
Next
Next

;einfach wenn tastendruck dann
If KeyDown(208) Then
;wenn die position des spielers (px,py+1) mit einem tile kollidiert, dass in der array einen höeren
;wert als 2 hat geht der if-satz nicht weiter und die figur bleibt stehen 
;die 2 ist gleichzeitig das frame des tilesets
If map(px,py+1) < 3 Then
;die figur wird um ein tile bewegt
py = py + 1
;die variable scrollx/y wird verändert und beim nächsten mal
;wenn die hauptschleife durchlaufen wird. malt man die karte halt
;an der position x/y-scrollx/y gemalt
;achja und - 32 weil die figur sich auch nur um 32 pixel
;bewegt.
scrolly = scrolly + 2
;überträgt die spielerkoordinaten auf die x und y variablen der map und malt unsere figur
move = 1
End If
End If

If KeyDown(200) Then
If map(px,py-1) < 3 Then
py = py - 1
scrolly = scrolly - 32
move = 1
End If
End If

If KeyDown(203) Then
If map(px-1,py) < 3 Then
px = px - 1
scrollx = scrollx - 32
move = 1
End If
End If

If KeyDown(205) Then
If map(px+1,py) < 3 Then
px = px + 1
scrollx = scrollx + 32
move = 1
End If
End If
;wenn man die leertaste drückt
If KeyHit(57) Then
;und die spielerposition auf den hebel-tile befindet
If map(px,py) = 32 Then
;dann wird die gesamte karte eingelesen und alle tür-tiles in graß-tiles
;umgewandelt
For y = 0 To 20
For x = 0 To 20
If map(x,y) = 4 Then
map(x,y) = 0
End If
Next
Next
End If
End If




;wenn move = 1 dann übertrage x auf px*32(*32 da die array so klein ist bei *1 oder *2 kommt schnell
;(array index out of bouds) und das wollen wir nicht wenn die koordinaten des spielers mit den
;koordinaten der map in verbindung gebracht worden sind, malen wir die figur
;auf der position x,y wir wollen die figur ja mit der map kollidieren lassen und nicht mit dem Nichts
;und da die map nun mal in die x und y koordinaten gespeichert wurden müssen wir das auch so
;berücksichtigen.Jetzt muss man aber scrollx und scrolly abziehen und außerdem habe ich
;delay 30 in die zeile eingefügt, weil die figur so langsamer wird. Cool,oder
If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x-scrollx,y-scrolly: Delay 50

Flip
Forever


;So es lebe einer meiner leser, entlich hat jehmand eine Frage gepostet, SUPER!!!!!!
;also die frage ist: "wenn ich auf einem Hebel eine Taste drücke, dann soll sich
;eine Tür öffnen, HMMM???. Ist doch ganz easy, man muss einfach auf tastendruck
;irgendwie die tür in der map einen anderen wer zuteilen, wen es interessier kann
;sich ja den code unter if keydown(57) then..... angucken. also leertaste auf dem hebel drücken
;und die tür öffnet sich.


;weitere fragen bitte an BlitzBasicUser@aol.com
;oder ICQ: ( 130150217 )



;Im nächsten tutorial wird gelernt, wie man mit maps umgeht


Nur bewegt sich die Figur hier immer ein Tile weiter, bei meinem Spiel soll sie aber nur 1 Pixel weiter gehen...
Das hab ich auch dann so hinbekommen, aber wie kann ich jetzt noch Kollisionen zwischen Spieler und Map
abfragen?

//Edit die Spieler x-Y Koordinate wird einfach + / - 1 gesetzt.... wie kann ich damit jz das tile abfragen worauf der SPieler gerade steht?

//Edit keiner einen Plan? ^^

//Edit ^^
-> Meine Map ohne Tiles hat eine Größe von ca. 14MB .. (7000*5000)
Aber ist es jetzt für Blitz aufwändiger so eine Map zu zeichnen oder das als Tiles ?

skey-z

BeitragSo, März 20, 2011 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
14Mb sind es als jpg oder png, im Speicher belegt das Bild 133MB(7000x5000 pixel x 4 byte)

Du musst prüfen ob dein Spieler auf den nächsten Block darf spielerX/tilesize+1
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Dottakopf

BeitragSo, März 20, 2011 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
der trick bei einer tilemap ist, nur die tiles anzuzeigen die gerade sichbar sind.

Such mal hier im forum das wurde bestimmt scho zig mal gezeigt.
Das schlüsselwort heißt scrolling oder Tile map Offset.

Zum Thema kollision.. da gibts hier sogar ein extra tutorial dafür.


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group