BASIC

Author Topic: Große Tilemaps ohne Frameverlust !  (Read 5312 times)

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Große Tilemaps ohne Frameverlust !
« on: 2007-Jul-06 »
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 :


Code: GLBasic [Select]
// --------------------------------- //
// 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
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 899
    • View Profile
Große Tilemaps ohne Frameverlust !
« Reply #1 on: 2007-Jul-06 »
Goil!

Grundgerüst für das nächste Labyrinth-Spiel ist damit gelegt.
Klasse.
Gefällt mir.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Große Tilemaps ohne Frameverlust !
« Reply #2 on: 2007-Jul-10 »
JA, da kannst große Labyrinthe mit  machen ;)
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1643
    • View Profile
    • http://lostrevenant.blogspot.com
Re: Große Tilemaps ohne Frameverlust !
« Reply #3 on: 2011-Dec-31 »
Ich packe mal deinen alten Code aus und bastle etwas dran herum, wenn's ok für dich ist! ^^

LG

W.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Re: Große Tilemaps ohne Frameverlust !
« Reply #4 on: 2011-Dec-31 »
Mach das :D
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Re: Große Tilemaps ohne Frameverlust !
« Reply #5 on: 2011-Dec-31 »
geht schnell :D

habs mit Polyvector in typearrays gemacht! Rennt wie sau!
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Re: Große Tilemaps ohne Frameverlust !
« Reply #6 on: 2011-Dec-31 »
Tilemap 1200x1200 Tiles
Tilegröße 10x10 pixel
Auflösung 800x600


was meinst du mit nachhalten?
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 4971
  • O Rly?
    • View Profile
Re: Große Tilemaps ohne Frameverlust !
« Reply #7 on: 2011-Dec-31 »
für ne Landkarte?
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard