Tilemap Scrolling RAF ICH NICHT!!!!!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Hendy

Betreff: Tilemap Scrolling RAF ICH NICHT!!!!!

BeitragSa, Feb 24, 2007 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mir neulich bei robsite.de
das Jumb ´n run Tutorial 1+2 geladen.
das 2 Tutorial tile map scrolling hier der code:
Code: [AUSKLAPPEN]
;Teil 1. Einfaches Scrolling durch Steuern der Cursortasten. Mit Begrenzungs- und Kollisionsabfrage.
Graphics 640,480

SetBuffer BackBuffer()
frametimer = CreateTimer (30)
ClsColor 0, 0, 255

;Gfx laden
Global tile = LoadImage ("tile2.bmp")
MaskImage tile, 255, 0, 255
Global dude = LoadAnimImage ("dude2.bmp", 32, 32, 0, 8)   
MaskImage dude, 255, 0, 255
Global Player_Counter = 8, Player_Frame = 0   ;SpielerFrame
;Variablen und Constante bestimmen

;Die Spielfigur bleibt an einer bestimmten Position stehen. Daher können wir die X- und Y-Variable
;als Constante definieren.
Const Player_pos_x = 304, Player_pos_y = 320
;Diese zusätzlichen Variablen benötigen wir um den Hintergrund zu bewegen   
Global scroll_x = 0, scroll_Y =0

;Die Constanten für einen Tastendruck
Const rauf = 200, runter = 208, rechts = 205, links = 203, space = 57



;Kartendaten lesen. Kennen wir ja schon aus dem ersten Tutorial :-)
Dim map (20,15)

Restore mapdata
For y=0 To 15
   For x=0 To 20
      Read map(x,y)
   Next
Next


;Hauptschleife
Repeat
Cls
WaitTimer (frametimer)

DrawMap()
MoveDude()

DrawImage dude, Player_pos_x, Player_pos_y

Flip

Until KeyHit (1)
End

;----Functionen----

Function DrawMap()
   For y = 0 To 15
      For x = 0 To 20
         If map(x,y) = 1 Then    ;Sollte ein Tile in dem Array(Datenfeld) stehen, Tile zeichnen
            DrawImage tile, x*32 - scroll_x, y*32 - scroll_y
            ;Die Position des Tiles wird einfach durch unseren zusätzlichen Variablen subtrahiert.
         EndIf
      Next
   Next
End Function 


Function MoveDude()
   ;in dieser Function berechnen wir unsere zusätzliche Scrolling-Variable.
   If KeyDown(links) Then
      If Player_Frame <4 Then Player_Frame = 4   ;sobald der Frame kleiner als 4 ist auf 4 setzen
      Player_Counter = Player_Counter -1         ;Zähler minimieren
      If Player_Counter = 0 Then               ;Sobald Zähler Null erreicht hat
         Player_Counter = 8                  ;Zähler auf neuen Wert setzen
         Player_Frame = Player_Frame +1         ;Frame erhöhen
         If Player_Frame = 8 Then Player_Frame = 4   ;Sollte Frame größer als 8 sein, auf 4 zurücksetzen
      EndIf             

      If map((Player_pos_x + scroll_x) /32,((Player_pos_y +16) + scroll_y) /32)=0 Then
      ;solange der Spieler nicht gegen ein Tile läuft.
         scroll_x = scroll_x  -4:
         ;scroll_x minimieren
         If scroll_x < -320 Then scroll_x = -320
         ;Randbegrenzung
      EndIf
   ElseIf KeyDown(rechts) Then   ;Genauso verhält es sich, wenn die Figur nach Rechts läuft, nur das
      If Player_Frame >3 Then Player_Frame = 0   ; hier die ersten 4 Frames gebraucht werden.
      Player_Counter = Player_Counter -1
      If Player_Counter = 0 Then
         Player_Counter = 8
         Player_Frame = Player_Frame +1
         If Player_Frame = 4 Then Player_Frame = 0
      EndIf

      If map(((Player_pos_x +32) + scroll_x) /32,((Player_pos_y +16) + scroll_y) /32)=0 Then
         scroll_x = scroll_x +4
         If scroll_x > 320 Then scroll_x = 320
      EndIf
   ElseIf KeyDown(rauf) Then
      If map(((Player_pos_x +16) + scroll_x ) /32,(Player_pos_y + scroll_y) /32)=0 Then
         scroll_y = scroll_y -4
         If scroll_y < -320 Then scroll_y = -320
      EndIf      
   ElseIf KeyDown(runter) Then
      If map(((Player_pos_x +16) + scroll_x) /32,((Player_pos_y +32) + scroll_y) /32)=0 Then
         scroll_y = scroll_y +4
         If scroll_y > 160 Then scroll_y = 160
      EndIf      
   EndIf
End Function

.mapdata
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

aber ich raf das nicht mit dem scroll_y blabla
ich hab es sogar schon mal ausgedruckt und schritt für schritt beschriebenwas passiert aber das wenn die Maustaste rechts gedrückt wird das sich dann die Karte bewegt [/code]
Smile Very Happy Very HappyD
 

bruce85

BeitragSa, Feb 24, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
das ist doch ganz klar, wenn du die Karte jetzt z.B. so zeichnest:
Drawimage tile,x*32-scroll_x,y*32-scroll_y
dann haben ja scroll_x und y noch die werte 0 wenn sich noch nix geändert hat.
Tust du jetzt z.B. scroll_x um 1 veringern scroll_x = scroll_x - 1
dann wird die karte um 1 Pixel nach links verschoben
z.B. sieht es so aus:
Drawimage tile,x*32-1,y*32-0
-1 sagt nix außer das die karte Minus 1 Pixel zurück verschoben wird.

Ich hoffe das ich dir ein wenig helfen konnte Very Happy

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Hendy

BeitragSa, Feb 24, 2007 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Yoa ein wenig Very Happy
Smile Very Happy Very HappyD
 

bruce85

BeitragSa, Feb 24, 2007 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier habe ich mal ein beispiel geschrieben, indem ein Text nach links bewegt wird:

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()

Global x=200,y=200
Global scroll_x,scroll_y

While Not KeyHit(1)
  Cls

  ;Text zeichnen
  Text x-scroll_x,y-scroll_y,"Hallo Welt!"

  ;Scroll_x um eins erhöhen
  scroll_x = scroll_x + 1

  ;Also da Scroll_x jetzt z.B. auf 1 ist, wird x dann
  ;eins abgezogen und der Text ist dann ein Pixen
  ;weiter nach links x-1

 
  ;      X-scroll_x=Ziel
  ;#### 200  -  1  =  199 ####

  Flip
Wend

End


MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Hendy

BeitragSo, Feb 25, 2007 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wunderbar danke bruce
Smile Very Happy Very HappyD
 

bruce85

BeitragSo, Feb 25, 2007 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein problem Wink
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group