Mapeditor : schelles Zeichnen der Maps
Übersicht

![]() |
FreemanBetreff: Mapeditor : schelles Zeichnen der Maps |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() FrEeMaN |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
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]
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alfadur hat Folgendes geschrieben: BlitzBasic: [AUSKLAPPEN]
[/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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ändert ja nix an der Tatsache dass er nur das notwendige einzeichnet ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. alles möglcihe vor berechnen 2. nur sichbarrer bereich!
BlitzBasic: [AUSKLAPPEN]
|
||
between angels and insects |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group