Hallo,
ich bau gerade an einem map editor, jedoch umso größer die map um so mehr lagt es. bei einer map von 10x10 mit 16x16px großen sprites gehts noch aber bei 20x20 lagt es schon. ich habe alle neuen treiber druf und trotzdem sehr langsam das ganze.
kann mir jemand helfen?
Code?
hier:
// --------------------------------- //
// Project: Editor
// Start: Thursday, February 15, 2007
// IDE Version: 4.094
// Globals //
GLOBAL MapX=150
GLOBAL MapY=150
GLOBAL Layer=3
GLOBAL tile_size_x = 16
GLOBAL tile_size_y = 16
GLOBAL max_tilesx = 10
GLOBAL max_tilesy = 10
GLOBAL Tilesize = 32
GLOBAL TileCount
GLOBAL cam_x
GLOBAL cam_y
GLOBAL cam_speed = 12
GLOBAL Tilenummer
GLOBAL PosYtiles=440
GLOBAL SelectEbene
GLOBAL Select_Layer = 0
// End Globals //
// Files //
LOADSPRITE "gfx/maus.bmp", 11999
LOADSPRITE "gfx/tiles/tile.bmp", 1
LOADSPRITE "", 0
// End Files //
X_MAKE2D
LoadMap("Map1.dat")
LoadFiles(1005)
//LoadTile ("gfx/tiles/tiles3.bmp",15,15)
WHILE KEY(1) = 0
DrawLayer()
ShowTilebar(1)
ShowMap(0)
MOUSESTATE mx, my, b1, b2
SPRITE 11999, mx, my
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// -=# LOADMAP #=-
// ------------------------------------------------------------- //
FUNCTION LoadMap: lm_name$
// Diese Variablen sind als LOCAL definiert:
// lm_name$
BLACKSCREEN
DIM map[max_tilesx][max_tilesy][Layer]
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
FOR y = 0 TO max_tilesy-1
GETFILE lm_name$, lm_counter , map[x][y][l]
lm_counter = lm_counter + 1
NEXT
NEXT
NEXT
FOR k = 0 TO Layer-1
FOR t = 0 TO max_tilesx-1
FOR z = 0 TO max_tilesy-1
PRINT map[t][z][k], t*tile_size_x, z*tile_size_y
NEXT
NEXT
NEXT
ENDFUNCTION // LOADMAP
// ------------------------------------------------------------- //
// -=# DRAWLAYER #=-
// ------------------------------------------------------------- //
FUNCTION DrawLayer:
// Diese Variablen sind als LOCAL definiert:
//
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
FOR y = 0 TO max_tilesy-1
FOR z = 0 TO 1005
//------------- Layer1
SELECT map[x][y][l]
CASE z
SPRITE z,x*tile_size_x,y*tile_size_y
ENDSELECT
NEXT
NEXT
NEXT
NEXT
ENDFUNCTION // DRAWLAYER
// ------------------------------------------------------------- //
// -=# LOADFILES #=-
// ------------------------------------------------------------- //
FUNCTION LoadFiles: num
// Diese Variablen sind als LOCAL definiert:
// num
FOR x = 1 TO num
LOADSPRITE "gfx/tiles/sprite"+x+".bmp", x
LOADSPRITE "gfx/tiles/sprite"+(x+1000)+".bmp", x+1000
LOADSPRITE "gfx/tiles/sprite"+(x+2000)+".bmp", x+2000
NEXT
LOADSPRITE "gfx/win.png", 12000
LOADSPRITE "gfx/rechts.png", 12001
LOADSPRITE "gfx/links.png", 12002
ENDFUNCTION // LOADFILES
// ------------------------------------------------------------- //
// -=# SHOWTILEBAR #=-
// ------------------------------------------------------------- //
FUNCTION ShowTilebar: choose
// Diese Variablen sind als LOCAL definiert:
// choose
IF choose = 1
SPRITE 12000, 0, 420
SPRITE 12002, 0, 440
SPRITE 12001, 626, 440
IF SPRCOLL (11999, mx, my, 12001, 626, 440) AND b1
move = move+1
ENDIF
IF SPRCOLL (11999, mx, my, 12002, 0, 440) AND b1
move = move-1
IF move < 1 THEN move = 0
ENDIF
IF MOUSEAXIS(2) = 1
Select_Layer = Select_Layer -1
IF Select_Layer < 0 THEN Select_Layer = 0
ENDIF
IF MOUSEAXIS(2) = -1
Select_Layer = Select_Layer +1
IF Select_Layer > 2 THEN Select_Layer = 2
ENDIF
FOR x = 1+move TO 30+move
SPRITE x+(Select_Layer*1000), 10*(x-move)*2, 451
NEXT
ENDIF
PRINT "Layer: "+Select_Layer, 0, 0
ENDFUNCTION // SHOWTILEBAR
// ------------------------------------------------------------- //
// -=# SHOWMAP #=-
// ------------------------------------------------------------- //
FUNCTION ShowMap: para
// Diese Variablen sind als LOCAL definiert:
// para
//DIM map2[40][26][3]
IF para = 1
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx
FOR y = 0 TO max_tilesy
DRAWLINE x*16, y*16, x*16+16, y*16, RGB(255,255,255)
DRAWLINE x*16, y*16, x*16, y*16+16, RGB(255,255,255)
NEXT
NEXT
NEXT
ENDIF
ENDFUNCTION // SHOWMAP
ich hab mit dem code 26 fps... ohne anzeigen hab ich 30 fps... is das nich ein wenig viel zu langsam?
und hier noch ein bild:
http://trucidare.tr.funpic.de/shot.jpg
Problem gelöst. bitte schließen
@trucidare
Schön das Dein Problem gelöst ist, aber woran lag es denn??
an der for-schleife mit dem z
FUNCTION DrawLayer:
// Diese Variablen sind als LOCAL definiert:
//
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
FOR y = 0 TO max_tilesy-1
FOR z = 0 TO 1005
//------------- Layer1
SELECT map[x][y][l]
CASE z
SPRITE z,x*tile_size_x,y*tile_size_y
ENDSELECT
NEXT
NEXT
NEXT
NEXT
ENDFUNCTION // DRAWLAYER
Habs durch SPRITE map
- [y][l],x*tile_size_x,y*tile_size_y
ersetzt.
Stimmt hier reicht ein einfaches IF statt der Schleife. Danke, dass Du's mit den Anderen teilst.
Danke für die Info! :)
Ich finde es halt immer gut, wenn bei einer Problemlösung auch ersichtlich wird woran es denn lag!
So können Anfänger wie ich evtl. was lernen :)
Schönes WE noch
Ein einfaches :
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
FOR y = 0 TO max_tilesy-1
SPRITE map[x][y][l], x*tile_size_x, y*tile_size_y
NEXT
NEXT
NEXT
tuts übrigends auch in der Dreifachen For-Schleife ;)
Grüße