Mapeditor : schelles Zeichnen der Maps

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Freeman

Betreff: Mapeditor : schelles Zeichnen der Maps

BeitragDo, Jun 23, 2005 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

seit längerem beschäftige ich mich mit einem Mapeditor. Er ist soweit fertig doch leidet er an geschwindigkeitsproblemen. Leider kann er in sachen speed bei z.B dem genialen Mapedi von TS lange nicht mithalten. Meine Maps werden im editor in 3Dimensionalen arrays gespeichert und so eingezeichnet:
Code: [AUSKLAPPEN]

for mapx=0 to map_breite-1
for mapy=0 to map_hoehe-1
for mlayer=1 to map_layer
DrawImageRect chipset,(Mapx*(tile_x*scalex))+raster_scrollx,(Mapy*(tile_y*scalex))+raster_scrolly,tile_x,tile_y,map[mapx,mapy,mlayer] 
next
next
next

natürlich bin ich mir im klaren das das sehr auf den Speicher geht aba wie soll man das schneller machen?

Ich bekomme enorme Speedprobleme wenn ich mehrere Layer habe.Natürlich wird nur das gezeichnet was man auch sieht,trotzdem is das ganze sehr bescheiden langsam, hat wer nen rat?

@TS: mich würde mal interessieren wie du das machst Smile

FrEeMaN
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Alfadur

BeitragFr, Jun 24, 2005 7:07
Antworten mit Zitat
Benutzer-Profile anzeigen
vermutlich zeichnest du doch nicht nur das was man sieht ...

for mapx=0 to map_breite-1
for mapy=0 to map_hoehe-1

map_breite und map_höhe sind doch höhe und breite der map!? aber das was man sieht ist vermutlich kleiner, also

BlitzBasic: [AUSKLAPPEN]

For x=0 To DISPLAYWIDTH
For y=0 To DISPLAYHEIGHT
DrawBlock img_tiles_tmp,x*TILEWIDTH+pxoff+SCREENXOFF,y*TILEHEIGHT+pyoff+SCREENYOFF,tilemap(x+txoff,y+tyoff,GROUNDLEVEL)
Next
Next


damit zeichne ich meine karte und geht recht fix... DISPLAYWIDTH und DISPLAYHEIGHT sind also x und y anzahl an tiles die gezeigt werden, pxoff und pyoff sind die pixel scrollwerte, SCREENXOFF und SCREENYOFF sind nur um zu bestimmen wo aufm bildschirm gezeichnet wird... txoff und tyoff sind die tile scrollwerte....[/syntax]
A Cray is the only computer that runs an endless loop in less than four hours.

Freeman

BeitragFr, Jun 24, 2005 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Alfadur hat Folgendes geschrieben:

BlitzBasic: [AUSKLAPPEN]

For x=0 To DISPLAYWIDTH
For y=0 To DISPLAYHEIGHT
DrawBlock img_tiles_tmp,x*TILEWIDTH+pxoff+SCREENXOFF,y*TILEHEIGHT+pyoff+SCREENYOFF,tilemap(x+txoff,y+tyoff,GROUNDLEVEL)
Next
Next

[/syntax]

Allerdings verwendest du drawbock, was gleichzeitig bedeuted das du keine Maskimage nutzen kannst. Mit anderen Worten gibt es auf deiner Map keine Transparenten Felder, also würde es bei dir schon 1 layer reichen was du anzeigst.Bei mir ist das leider etwas anders. Aber ich werde deine Idee mal genauer Anschauen.Danke erstmal
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

BladeRunner

Moderator

BeitragFr, Jun 24, 2005 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ändert ja nix an der Tatsache dass er nur das notwendige einzeichnet Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Jan_

Ehemaliger Admin

BeitragFr, Jun 24, 2005 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
1. alles möglcihe vor berechnen 2. nur sichbarrer bereich!
BlitzBasic: [AUSKLAPPEN]

gw=DISPLAYWIDTH/Tilewidth
gh= DISPLAYHEIGHT/tileheight
For x=Mapx/Tilewidth To gw
For y=Mapy/Tileheight To gh
DrawBlock img_tiles_tmp,x*TILEWIDTH+pxoff+SCREENXOFF,y*TILEHEIGHT+pyoff+SCREENYOFF,tilemap(x+txoff,y+tyoff,GROUNDLEVEL)
Next
Next
between angels and insects

Alfadur

BeitragFr, Jun 24, 2005 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
neee, jan, deins funzt so nett. wasn mapx, wasn mapy? warum teilst du displaywidth nochmal? nene ... und was freeman angeht, das ist nich mein kompletter code, hinten dran steht ja groundlevel, das ist das unterste, da gibts nix transparentes. die anderen layer werden natürlich mit drawimage gezeichnet ... hätte ich evtl dazu sagen sollen
A Cray is the only computer that runs an endless loop in less than four hours.

Jan_

Ehemaliger Admin

BeitragFr, Jun 24, 2005 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Alfadure, glaube mir, das funzt.
jedenfalls schneller, als was du sagtest.
biss auf, das ich mit deinen Variablennamen ncihts anfangen konnte.
aber dafür kann ich ja nix.
between angels and insects

Alfadur

BeitragFr, Jun 24, 2005 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
du hast meinen code nicht verstanden. displaywidth und height sind nicht 800x600 oder so, sondern die maximale anzahl an tiles die vertikal und horizontal auf den bildschirm passen, also so 25x20 oder so... mapx ist bei dir garnicht definiert. deine schleife würde also bei ner tilegröße von 32x32 bei x von 0 (0/32 - mapx/tilewidth) bis 0 (25/32 - displaywidth/tilewidth) gehen... y analog.

was die fragestellung angeht hast du aber vollkommen recht, das zeichen würde in dem fall sehr sehr schnell gehen .-)

was man allerdings noch vorberechnen könnte wäre das man pxoff+screenxoff und analog y zusammenfasst. sind nur zwei additionen, aber bei 25x15x3 layer sind das auch schon ~2250 operationen. naja. aber was ist das schon ...
A Cray is the only computer that runs an endless loop in less than four hours.

TheShadow

Moderator

BeitragFr, Jun 24, 2005 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich berechne zuerst welche tiles zu sehen sind und dann zeichne ich diese

for y=starty to endy
for x=startx to endx
'...
next
next

die berechnung unterscheidet sich je nach layerart - diamond iso-maps sind die kompliziertesten
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group