Hi
Hier mal ein Beispiel, wie ihr eine Tilemap macht, die keinen übermässigen Speicher frisst.
auch nicht bei einer Tilemap von 1000 x 1000 ( 1.000.000 Tiles !!!!! ), Ohne Lag und ohne Frameverlust !
Hier der Code :
// --------------------------------- //
// Project: Tilemap
// Start: Thursday, July 05, 2007
// IDE Version: 4.237
SETSCREEN 640,480,0 // Setze Grafikmodus
GETSCREENSIZE GraphX, GraphY // Beziehe Fenster breite und höhe
// -------Erstelle Sprite----------------
FILLRECT 0,0,32,32, RGB(0x00, 0xff, 0x80)
FILLRECT 2,2,28,28, RGB(0x00, 0x80, 0xff)
GRABSPRITE 0,0,0,32,32
BLACKSCREEN
// Globale setzen---
GLOBAL MaxTX = 50 // Maximale Tiles im Dim X.(testet mal 1000)
GLOBAL MaxTY = 50 // Maximale Tiles im Dim Y.(testet mal 1000)
GLOBAL TS = 32 // Tilesize 32 x 32 also 1x 32 reicht ja.
GLOBAL cam_speed = 2// Scrollingspeed
//------------------
// Mache ein Array----------
DIM level [MaxTX][MaxTY]
// Setze Random Felder, 0 = Sprite, 1 = kein Sprite
FOR x = 0 TO MaxTX-1
FOR y = 0 TO MaxTY-1
level[x][y] = RND(1) // zufällig setzen
NEXT
NEXT
//########################################################
// HAUPTSCHLEIFE
//########################################################
WHILE TRUE
cam_x_div = INTEGER(cam_x / TS) // Anfang der ersten gezeigten DIMs errechnen X
cam_y_div = INTEGER(cam_y / TS) // Anfang der ersten gezeigten DIMs errechnen Y
// Zeichen der Map, es werden nur Sprites gezeichnet, die auch auf dem
// Screen zu sehen sind !
FOR x = cam_x_div TO cam_x_div + (GraphX/TS)
FOR y = cam_y_div TO cam_y_div + (GraphY/TS)
SPRITE level[x][y], x*TS-cam_x, y*TS-cam_y // SPRITE Zeichen
NEXT
NEXT
//-------------Scrolling--------------
IF KEY(203) THEN DEC cam_x , cam_speed // Links
IF KEY(205) THEN INC cam_x , cam_speed // Rechts
IF KEY(200) THEN DEC cam_y , cam_speed // Hoch
IF KEY(208) THEN INC cam_y , cam_speed // Runter
// Bregengungen setzen----------------
IF cam_x < 0 THEN cam_x = 0
IF cam_y < 0 THEN cam_y = 0
// -(GraphX+1) " + 1 " damit der ausgleich von 0 to .. ausgeglichen wird, sonnst Array out of Bounds !
IF cam_x > (MaxTX*TS)-(GraphX+1) THEN cam_x = (MaxTX*TS)-(GraphX+1)
// -(GraphY+1) " + 1 " damit der ausgleich von 0 to .. ausgeglichen wird, sonnst Array out of Bounds !
IF cam_y > (MaxTY*TS)-(GraphY+1) THEN cam_y = (MaxTY*TS)-(GraphY+1)
// Kleine Debug anzeige
PRINT "X: "+cam_x, 10, 10
PRINT "Y: "+cam_y, 10, 20
SHOWSCREEN
WEND
END
EDIT:
Habs grade mit 4 Millionen Tiles laufen lassen, und es Funzt noch Astrein, brauch aber 5 Sec zum laden :D
EDIT 2 :
4000 x 4000 (16 millionen Tiles)
Schranz0r = knapp 20 Sec
BumbleBee = 1 min 12 sec
Scrolling wie immer gut :D
Goil!
Grundgerüst für das nächste Labyrinth-Spiel ist damit gelegt.
Klasse.
Gefällt mir.
JA, da kannst große Labyrinthe mit machen ;)
Ich packe mal deinen alten Code aus und bastle etwas dran herum, wenn's ok für dich ist! ^^
LG
W.
Mach das :D
geht schnell :D
habs mit Polyvector in typearrays gemacht! Rennt wie sau!
Tilemap 1200x1200 Tiles
Tilegröße 10x10 pixel
Auflösung 800x600
was meinst du mit nachhalten?
für ne Landkarte?