Bildlauf scrollen

Anfängerfragen zum Programmieren mit PureBasic.
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Bildlauf scrollen

Beitrag von Defmaster »

also hab schon gesucht aber das was ich fand hat mir nicht sehr geholfen.

Nun ich übe mich gerade an nen kleinen 2D Spiel.

Nun habe eine Auflösung von 640x480 gewählt.

Jetzt möchte es noch scrollen lassen wenn der Spieler nach links,rechts,oben,unten geht, damit man mehr der Spielwelt sieht.

So nun wie ich das Game aufgebaut habe:

Die Grafiken werden geladen und in einem Array speichere ich die Position.
Zeichnen tue ich dann so:

Code: Alles auswählen

  For x=0 To 20
    For y=0 To 15
      If Welt(x, y) <> 0
        DisplaySprite(Welt(x, y), x*32, y*32)
      EndIf
    Next y
  Next x 
EndProced
Nun habe ich einen Thread gelesen wobei man Camera Daten beim bewegen speichern soll und dann auf die Position der Sprite addieren soll.

Habe ich bereits versucht jedoch "scrollt" es nicht sondern bleibt beim alten.

Den Thread den ich drch suchen fand: http://forums.purebasic.com/german/view ... en&start=0
(Habe dabei den Code von Seite 2 von Leo genommen.)

Nun hoffe ihr könnt mir helfen.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

dass kannst du machen, in dem du abfragst, was passiert, und dann entsprächend handelst.

also wenn der user zb die pfeiltaste nach unten drückt, dann soll die map ja noch oben gehen.

Code: Alles auswählen

if keyboardpushed(#pb_key_down)
MapX = MapX - 5
endif

displaysprite(Map,MapX,MapY)

dass musst du dann mit allen richtungen machen.
dann scrollt sich die map immer, wenn sich die spiel figur bewegt. (also, wenn der user den spieler bewegen will :wink: ) :allright:

sollte nicht so schwer sein, das zu realisieren.
sonnst schau mal im code archiev nach, unter games und dann backgroundscroller oder so :allright:
-.-"
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag von Defmaster »

Haltet mich für blöd aber irgendwie bekomm ichs nich hin.

Also:

Hier mal der der wichtigste code:

Code: Alles auswählen

Procedure CheckCollision(SpeedX.f, SpeedY.f)
  Shared spieler_x,spieler_y
  For x=0 To 20-1
    For y=0 To 15-1
      If Welt(x, y) <> 0
        If SpriteCollision(#Spieler, Int(spieler_x + SpeedX), Int(spieler_y + SpeedY), Welt(x, y), x*32, y*32)
          ProcedureReturn 1
        EndIf
      EndIf
    Next y
  Next x
EndProcedure 

Procedure CheckSterben(SpeedX.f, SpeedY.f)
  Shared spieler_x,spieler_y
  For x=0 To 20-1
    For y=0 To 15-1
      If Tode(x, y) <> 0
        If SpriteCollision(#Spieler, Int(spieler_x + SpeedX), Int(spieler_y + SpeedY), Tode(x, y), x*32, y*32)
          ProcedureReturn 1
        EndIf
      EndIf
    Next y
  Next x
EndProcedure 

Procedure bewegen()
  Shared spieler_x,spieler_y,speed_bewegung,spieler_aussehen
  
  If KeyboardPushed(#PB_Key_Right) And spieler_x < 625
    If CheckCollision(speed_bewegung, 0) = 0 And CheckSterben(speed_bewegung, 0) = 0
      spieler_x + speed_bewegung  ; Spieler bewegen
      spieler_aussehen = #Spieler ; Bildwechsel
    ElseIf CheckSterben(speed_bewegung, 0) = 1
      spieler_x = 0
      spieler_y = 0
    EndIf 
  EndIf 
  
  If KeyboardPushed(#PB_Key_Left) And spieler_x > 0
    If CheckCollision(speed_bewegung-4, 0) = 0 And CheckSterben(speed_bewegung, 0) = 0
      spieler_x - speed_bewegung
      spieler_aussehen = #Spieler_2 ; Bild wechsel
    ElseIf CheckSterben(speed_bewegung-4, 0) = 1
      spieler_x = 0
      spieler_y = 0
    EndIf
  EndIf 
  
  If KeyboardPushed(#PB_Key_Up) And spieler_y > 0
    If CheckCollision(0, speed_bewegung-4) = 0 And CheckSterben(speed_bewegung, 0) = 0
      spieler_y - speed_bewegung
    ElseIf CheckSterben(speed_bewegung-4, 0) = 1
      spieler_x = 0
      spieler_y = 0
    EndIf
  EndIf 
  
  If KeyboardPushed(#PB_Key_Down) And spieler_y < 445
    If CheckCollision(0, speed_bewegung) = 0 And CheckSterben(speed_bewegung, 0) = 0
      spieler_y + speed_bewegung
    ElseIf CheckSterben(speed_bewegung, 0) = 1
      spieler_x = 0
      spieler_y = 0
    EndIf
  EndIf  
  
EndProcedure 

Procedure welt_zeichnen()
  For x=0 To 20
    For y=0 To 15
      If Welt(x, y) <> 0
        DisplaySprite(Welt(x, y), x*32, y*32)
      EndIf
    Next y
  Next x 
EndProcedure 

Procedure tode_zeichnen()
  For x=0 To 20
    For y=0 To 15
      If Tode(x, y) <> 0
        DisplaySprite(Tode(x, y), x*32, y*32)
      EndIf
    Next y
  Next x 
EndProcedure
Die Maps werden halt per Dim Welt(20,15) und Dim Tode(20,15)
gemacht.

Kannst du es für mich dummie ganz genau erklären?
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Code: Alles auswählen

Procedure welt_zeichnen()
Shared spieler_x,spieler_y 
  For x=0 To 20
    For y=0 To 15
      If Welt(x, y) <> 0
        DisplaySprite(Welt(x, y), x*32 - spieler_x, y*32 - spieler_y)
      EndIf
    Next y
  Next x
EndProcedure

Procedure tode_zeichnen()
Shared spieler_x,spieler_y 
  For x=0 To 20
    For y=0 To 15
      If Tode(x, y) <> 0
        DisplaySprite(Tode(x, y), x*32 - spieler_x, y*32 - spieler_y)
      EndIf
    Next y
  Next x
EndProcedure
Geht es so?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten