Author Topic: Map Editor  (Read 4005 times)

Offline trucidare

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1377
  • Bachelor of Fail
    • View Profile
Map Editor
« on: 2007-Feb-16 »
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

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10816
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Map Editor
« Reply #1 on: 2007-Feb-16 »
Code?

Offline trucidare

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1377
  • Bachelor of Fail
    • View Profile
Map Editor
« Reply #2 on: 2007-Feb-16 »
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

Offline trucidare

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1377
  • Bachelor of Fail
    • View Profile
Map Editor
« Reply #3 on: 2007-Feb-16 »
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

Offline Antidote

  • Mr. Polyvector
  • ***
  • Posts: 164
    • View Profile
    • http://antidotes.wordpress.com
Map Editor
« Reply #4 on: 2007-Feb-16 »
@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.

Offline trucidare

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1377
  • Bachelor of Fail
    • View Profile
Map Editor
« Reply #5 on: 2007-Feb-17 »
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

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10816
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Map Editor
« Reply #6 on: 2007-Feb-17 »
Stimmt hier reicht ein einfaches IF statt der Schleife. Danke, dass Du's mit den Anderen teilst.

Offline Antidote

  • Mr. Polyvector
  • ***
  • Posts: 164
    • View Profile
    • http://antidotes.wordpress.com
Map Editor
« Reply #7 on: 2007-Feb-17 »
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.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5111
  • O Rly?
    • View Profile
Map Editor
« Reply #8 on: 2007-Mar-23 »
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 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard