Map Editor

Previous topic - Next topic

trucidare

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?
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello


trucidare

hier:

Code (glbasic) Select
// --------------------------------- //
// 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
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

trucidare

Problem gelöst. bitte schließen
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Antidote

@trucidare
Schön das Dein Problem gelöst ist, aber woran lag es denn??
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

trucidare

an der for-schleife mit dem z

Code (glbasic) Select
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.
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello

Stimmt hier reicht ein einfaches IF statt der Schleife. Danke, dass Du's mit den Anderen teilst.

Antidote

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
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

Schranz0r

Ein einfaches :

Code (glbasic) Select
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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard