Problem mit Scrolling beim Tile-Editor...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Darthshoot

Betreff: Problem mit Scrolling beim Tile-Editor...

BeitragSa, Jan 06, 2007 10:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Mein Tile-Editor soll Levels erstellen Wink was sonst *g*

Naja auf jedenfall sind die Karten manchmal größer als der Bildschirm und deshalb muss man das ganze Scrollen können. Dazu habe ich diese Routine (nur für die X Achse am Anfang) gebaut:

(Übrigens XLevel ist z.B. 25 groß [also ist XLevel die Tileanzahl])

Code: [AUSKLAPPEN]
global ScrollX = 0


Code: [AUSKLAPPEN]
; Map muss man scrollen können!
If MouseX() >= 1023 Then ScrollX = ScrollX + 1
If MouseX() <= 0 Then ScrollX = ScrollX - 1


Und hier das Rendern der Karte:

Code: [AUSKLAPPEN]
; Map wird gerendert
For YMap = 0 To (YLevel - 1)
For XMap = 0 To (XLevel - 1)
DrawBlock Tex(Map(XMap, YMap)), (XMap - ScrollX) * 32, YMap * 32
Next
Next


Das geht schonmal perfekt. Jetzt ist aber das Problem, dass die Maus mit der aktuell selectierten Tiletexture NICHT außerhalb der Karte darf. Dazu die funktionierende Routine ohne Scrolling:

Code: [AUSKLAPPEN]
; Maus initialisieren
If MouseX() < XLevel * 32 Then XMaus = MouseX() / 32
If MouseY() < YLevel * 32 Then YMaus = MouseY() / 32


Meine Frage ist jetzt.. wie mach ich, dass er auch mit Scrolling die Karte nicht verlassen kann? Also die Maus.. ich hab schon soo viel probiert :/ ihr seid meine letze Hoffnung!

Danke im Voraus.
MfG Darthshoot

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 06, 2007 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich dich richtig verstanden habe, so mache eine Abfrage die das überprüft. Irgendwo hast du ja bestimmt paar Codezeilen die die Mapposition aus den Daten der Mausposition und Scrollposition die ausgewählte Mapposition berechnet. So nimm diese und überprüfe auf Überlauf der Werte. Eine andere Möglichkeit ist auch, dass Scrollen ausserhalb des möglichen gleich zu unterbinden.
 

Darthshoot

BeitragSa, Jan 06, 2007 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm also meine Abfrage ist etwa so, aber sie klappt nicht (warum auch immer)

Code: [AUSKLAPPEN]
; Maus initialisieren
If MouseX() < (XLevel + ScrollX) * 32 Then XMaus = MouseX() / 32
If MouseY() < YLevel * 32 Then YMaus = MouseY() / 32


Eigendlich sollte er jetz net mehr außerhalb der zu zeichnenden Map hingehen dürfen, oder? Also die Maus...

Rone

BeitragSa, Jan 06, 2007 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
moin,

mach doch einfach ne Abfrage ob XMaus und YMaus innerhalb des TileMaps sind und wenn nicht, dann setzte Sie einfach entsprechend auf das Minimum oder Maximum

Bildschirmbreite und Hoehe in Tiles ermitteln
Code: [AUSKLAPPEN]
Global ScreenWidth = GraphicsWidth()/32+1
Global ScreenHeight = GraphicsHeight()/32+1


Aktuelle Tile Position, wenn außerhalb des Map, dann innerhalb machen...
Code: [AUSKLAPPEN]

XMaus = ( MouseX() - ScrollX ) / 32
YMaus =  ( MouseY()  - ScrollY ) / 32

If XMaus > XLevel-1 Then
   XMaus = XLevel -1
If XMaus < 0 Then
   XMaus = 0
EndIf

If YMaus > YLevel-1 Then
   YMaus = YLevel -1
If YMaus < 0 Then
   YMaus = 0
EndIf

Beim einzeichnen des Maps darauf achten, das nur Sichtbare Tiles eingezeichnet werden.
Code: [AUSKLAPPEN]

x1 = ScrollX / 32
x2 = x2 + ScreenWidth
If x2 > XLevel-1 Then x2 = XLevel -1

y1 = ScrollX / 32
y2 = y1 + ScreenHeight
If y2 > YLevel-1 Then y2 = YLevel -1

For y1 = 0 To y2
   For x1 = 0 To y2
      DrawBlock Tex(Map(XMap, YMap)), (XMap - ScrollX) * 32, (YMap - ScrollX) * 32
   Next
Next


Beim scrollen des Maps aufpassen, dass nicht zu weit gescrolled wird...
Code: [AUSKLAPPEN]
;Map muss man scrollen können,
If MouseX() >= 1023 Then
   ScrollX = ScrollX + 1
   If ScrollX > (XLevel -1)*32 Then  ScrollX = (XLevel -1 - ScreenWidth)*32
EndIf
If MouseX() <= 0 Then
   ScrollX = ScrollX - 1
   If ScrollY > (YLevel -1)*32 Then  ScrollY = (YLevel -1 - ScreenHeight)*32
EndIf


hab jetzt nichts getestet, aber müsste eigendlich funktionieren...

mfg
Rone

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group