Dim + Scroll für größere Maps?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Schranz0r

Betreff: Dim + Scroll für größere Maps?

BeitragSo, Okt 29, 2006 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi leute, ich hab so meine Map gezeichnet:
Code: [AUSKLAPPEN]
For x = 0 To MapX
For y = 0 To MapY
   DrawImage tiles,(x*Tilesize) - scrX, (y*Tilesize) - scrY, Map(x,y)
Next
Next


Nun frag ich mich, ob es da eine schönere(Schnellere) Methode gibt?


Weil meine Maps auch mal, sagen wir, 3000+ tiles haben soll.

thx & Tschö
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Blitzcoder

Newsposter

BeitragSo, Okt 29, 2006 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, aber was wilst du? Das ist allemal schnell genug. Allerdings kannst du ja immer prüfen, ob das jeweilig Tile überhaupt noch auf dem Bildschirm ist. Wenn nicht, brauchst du es auch nicht zeichnen.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
  • Zuletzt bearbeitet von Blitzcoder am Mo, Okt 30, 2006 10:57, insgesamt einmal bearbeitet

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Okt 29, 2006 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht prüfen ob sie gemalt werden können, sondern einfach nur die sichbaren malen
So oder ähnlich sollte es gehen!
Code: [AUSKLAPPEN]
    Start_x = Floor (scrX / Tilesize)
    Start_y = Floor (scrY / Tilesize)
    ;
    Ende_x = Start_x + Floor (GraphWidth() /Tilesize) + 1
    Ende_y = Start_y + Floor (GraphHeight ()/ Tilesize) + 1
    ;
   
    For y = Start_y To Ende_y
        For x = Start_x To Ende_x
           
                 DrawImage tiles,(x*Tilesize) - scrX, (y*Tilesize) - scrY, Map(x,y)
           
        Next
    Next
[BB2D | BB3D | BB+]

Schranz0r

BeitragMo, Okt 30, 2006 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
    Start_x = Floor (scrX / Tilesize)
    Start_y = Floor (scrY / Tilesize)
    ;
    Ende_x = Start_x + Floor (GraphicsWidth() /Tilesize) + 1
    Ende_y = Start_y + Floor (GraphicsHeight ()/ Tilesize) + 1
    ;
   
    For y = Start_y To Ende_y
        For x = Start_x To Ende_x
           
                 DrawImage tiles,(x*Tilesize) - scrX, (y*Tilesize) - scrY, Map(x,y)
           
        Next
    Next


dann stimmt ja meine Map nicht mehr Sad
und mit den tiles zeichen haut auch net mehr hin da er ja X und Y so nicht mehr hat ! Confused
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Hubsi

BeitragMi, Nov 01, 2006 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Scrolling und Kolli auf Tilemap ausgehend von 32*32 Pixel Tiles und 32*32 Pixel Spielfigur:
BlitzBasic: [AUSKLAPPEN]
For y=0 To viewheight+1 ; Map malen
For x=0 To viewwidth+1
tmp=map(x+scrollx,y+scrolly)
If tmp>0 DrawImage tile(tmp),x*32+schiebx,y*32+schieby
Next
Next

relx=player_x-(scrollx*32-schiebx) ; relative Koordinaten
rely=player_y-(scrolly*32-schieby)

; Kollision:
u=map((player_x+16)/32,(player_y-2)/32) ; Oben / Up
r=map((player_x+32)/32,(player_y+16)/32) ; Rechts / Right
d=map((player_x+16)/32,(player_y+32)/32) ; Unten / Down
l=map(player_x/32,(player_y+16)/32) ; Links / Left
m=map((player_x+16)/32,(player_y+16)/32) ; Mitte / Middle

;*** Scrolling ***
If relx<300 And scrollx>0 ; links
schiebx=schiebx+(300-relx)
If schiebx>=0
scrollx=scrollx-1
If scrollx<0 Then scrollx=0
diff=schiebx*-1
schiebx=-32-diff
EndIf
EndIf
If relx>screenwidth-300 And scrollx<mapwidth-viewwidth ; rechts
schiebx=schiebx-(relx-(screenwidth-300))
If schiebx<=-32
scrollx=scrollx+1
schiebx=schiebx Mod 32
EndIf
EndIf
If rely<200 And scrolly>0 ; oben
schieby=schieby+(200-rely)
If schieby=>0
scrolly=scrolly-1
If scrolly<0 Then scrolly=0
diff=schieby*-1
schieby=-32-diff
EndIf
EndIf
If rely>screenheight-200 And scrolly<mapheight-viewheight ; unten
schieby=schieby-(rely-(screenheight-200))
If schieby<=-32
scrolly=scrolly+1
schieby=schieby Mod 32
EndIf
EndIf


Alles was jetzt noch zu tun ist, ist die Spielfigur(en) zu bewegen (die Koords können/werden jenseits der Auflösung liegen), gezeichnet wird auf relx bzw. rely. In u, r, d, l und m wird die Nummer des Tiles zurückgegeben. Viel Spaß damit Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

DerHase

BeitragMi, Nov 01, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Schranz0r, ich kann Dir immer noch >>>DIES<<< hier empfehlen Wink
Play Satyr!

Schranz0r

BeitragFr, Nov 03, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
OMG Hase Danke!

Jetzt seh ich erst wie es geht Shocked
Ist ja total simpel.

Big thx
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group