Frage zu TileMap-Geschwindigkeit
Übersicht

MynBetreff: Frage zu TileMap-Geschwindigkeit |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kollisionen sind mit einer Tilemap auch viel, viel einfacher umzusetzen.
MFG Lador |
||
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran" Screenshot | Worklog Fortschritt: ca. 70% |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group