Parallax Scrolling

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Skabus

Betreff: Parallax Scrolling

BeitragFr, Jan 25, 2008 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich möchte für ein Hauptmenü einen Hintergrund programmieren welcher von alleine im Hintergrund
ununterbrochen scrollt.In diagonaler Richtung.Ich habe bissher ne ganze Menge probiert aber letzlich habe ich das Problem das immer irgendwo zu sehen ist das es sich nicht um ein durchgängiges Bewegen
des Hintergrundes handelt....

Weiß jemand wie ich dieses Problem lösen könnte?
Hier mein aktueller Code:

Code: [AUSKLAPPEN]


Graphics 800,600,16,1
SetBuffer BackBuffer()



 ;für das Menü relevante Variablen

Global mCursor%   = 0      ;Position des Cursors
Global mBackX     = 0      ;die X-Position des Hintergrunds
Global mBackY     = 0      ;die Y-Position des Hintergrunds
Global mBackX2    = -800
Global mBackY2    = -600
Global QUITMENU   = False  ;der Menu-Beenden-Flag

mBack = LoadImage("mBack.PNG")

 ;Hauptschleife des Hauptmenüs
 While QUITMENU = False

   Cls
   ClsColor 0,0,0

   ;die Oberfläche des Hauptmenüs wird gezeichnet
   ;und der Hintergrund angepasst, Positionen werden aktualisiert

   mBackX = mBackX + 6.5
   mBackY = mBackY + 5

   If mBackX   > 800 And mBackY  > 600 Then mBackX  = -800 : mBackY  = -600
   If mBackX2  > 800 And mBackY2 > 600 Then mBackX  = -800 : mBackY  = -600

   ;die Hintergrundanimation wird angezeigt

   DrawImage mBack,mBackX,mBackY
   DrawImage mBack,mBackX - 800,mBackY - 600
   DrawImage mBack,mBackX,mBackY - 600
   DrawImage mBack,mBackX - 800,mBackY
   DrawImage mBack,mBackX2,mBackY2
   DrawImage mBack,mBackX2 - 800,mBackY2 - 600
   DrawImage mBack,mBackX2,mBackY2 - 600
   DrawImage mBack,mBackX2 - 800,mBackY2


   If KeyHit(1) Then QUITMENU = True : QUIT = True
   

   ;das Menü wird angezeigt
   Flip
 
 Wend



Als Bild habe ich nur ein 800x600 großes Bild mit einem Raster benutzt, darauf sollen später Miniaturbilder
der vorkommenden Gesichter.Wer Harvest Moon - back to nature gespielt hat weiß wie ich mir das
ungefähr vorstelle.

Ich würde mich freuen wenn mir jemand sagen könnte was ich falsch mache.
Mein Lösungsansatz war folgender:

Ich lasse den Hintergrund von außerhalb des Bildschirms in den Bildschirmauschnitt reinbewegen und bewege den selben Hintergrund nochmal hinterher sodass man nicht sieht das es sich nur um einen Auschnitt handelt.Sobald der zweite Hintergrund den Bildschirmauschnitt vollständig bedeckt
bewegt sich der erste wieder an den Anfang.Und wieder von vorne....

Aber irgendwie wills nicht werden.....

Vielen Dank, im vorraus!


MfG Skabus
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu
 

Hahninator

BeitragFr, Jan 25, 2008 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, das du nur eine Variable benutzt. Wenn der Fall eintritt das
mBackX > 800 And mBackY > 600 ist, werden alle 4 Bilder zurückgesetzt nicht nur eins.

Code: [AUSKLAPPEN]

   DrawImage mBack,mBackX,mBackY
   DrawImage mBack,mBackX - 800,mBackY - 600
   DrawImage mBack,mBackX,mBackY - 600
   DrawImage mBack,mBackX - 800,mBackY
   DrawImage mBack,mBackX2,mBackY2
   DrawImage mBack,mBackX2 - 800,mBackY2 - 600
   DrawImage mBack,mBackX2,mBackY2 - 600
   DrawImage mBack,mBackX2 - 800,mBackY2


Probiers mal so, das du jedes Koordinate in eine eigene Variable schreibst. Dafür würde ich dir ein Dim-Feld empfehlen

Code: [AUSKLAPPEN]

   Dim Bild_Kordinaten(10,2)
   DrawImage mBack,Bild_Kordinaten(1,1),Bild_Kordinaten(1,2)
   DrawImage mBack,Bild_Kordinaten(2,1),Bild_Kordinaten(2,2)
   DrawImage mBack,Bild_Kordinaten(3,1),Bild_Kordinaten(3,2)


Aber mal noch eine Frage: Hast du schon das dazugehörige Programm fertig? Denn das Hauptmenü ist das letzte was man machen sollte

TheProgrammer

BeitragFr, Jan 25, 2008 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder benutz einfach Tileimage oder Tileblock.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being

Skabus

BeitragFr, Jan 25, 2008 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
TheProgrammer hat Folgendes geschrieben:
Oder benutz einfach Tileimage oder Tileblock.

Mfg
TheProgrammer


Hatte ich mir auch schon überlegt, aber das ist denke ich zu viel Aufwand für eine eigentlich simple Sache.


@Hahninator: Ja das Spiel ist bereits mehr oder weniger fertig.Ich programmier dafür nur einige
Verbesserungen die mir noch eingefallen sind und daher dachte ich ein animierter Menühintergrund
wäre net schlecht^^

Vielen Dank für die Tips, ich werds gleich mal ausprobieren.....


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

TheProgrammer

BeitragFr, Jan 25, 2008 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso zu viel Aufwand? So, wie ich dich verstanden habe, möchtest du doch einfach nur ein Hintergrundbild gekachelt scrollen lassen. Da brauchst du das Bild nur einmal mit TileImage/TileBlock zeichnen..
aktuelles Projekt: The last day of human being

Skabus

BeitragFr, Jan 25, 2008 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
TheProgrammer hat Folgendes geschrieben:
Wieso zu viel Aufwand? So, wie ich dich verstanden habe, möchtest du doch einfach nur ein Hintergrundbild gekachelt scrollen lassen. Da brauchst du das Bild nur einmal mit TileImage/TileBlock zeichnen..


Aso....Ich dachte du meinst es mit Tiles zu machen.....
Danke, ich probiers mal aus.....



MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

TheProgrammer

BeitragFr, Jan 25, 2008 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

Global x# = 0
Global y# = 0

image = CreateBgImage()


While Not KeyHit(1)
   Cls
   
   x#=x#+6.5
   y#=y#+5
   
   If x#>800 Then x#=0
   If y#>600 Then y#=0
   
   TileBlock image,x#,y#
   
   Flip
Wend
FreeImage image
End




Function CreateBgImage()

   img = CreateImage(800,600)
   SetBuffer ImageBuffer(img)
   
   For I = 1 To 100
      Color Rand(0,255),Rand(0,255),Rand(0,255)
      Rect Rand(0,800),Rand(0,600),Rand(100,200),Rand(100,200)
   Next
   
   SetBuffer BackBuffer()
   
   Return img

End Function


Hatte gerade Langeweile.. Wink


Mfg
TheProgrammer
aktuelles Projekt: The last day of human being

Skabus

BeitragFr, Jan 25, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
TheProgrammer hat Folgendes geschrieben:


Hatte gerade Langeweile.. Wink


Mfg
TheProgrammer


Hey, recht herzlichen Dank Very Happy
Jetzt funzt es so wie ichs haben wollte!


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

PSY

BeitragFr, Jan 25, 2008 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
springt bei mir minimal, sobald ein diagonaler bildlauf vorbei ist. fällt aber kaum auf. so ists flüssig :


Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

Global x# = 0
Global y# = 0

image = CreateBgImage()


While Not KeyHit(1)
   Cls
   
   x#=x#+6.5 mod 800
   y#=y#+5 mod 600
   
   TileBlock image,x#,y#
   
   Flip
Wend
FreeImage image
End




Function CreateBgImage()

   img = CreateImage(800,600)
   SetBuffer ImageBuffer(img)
   
   For I = 1 To 100
      Color Rand(0,255),Rand(0,255),Rand(0,255)
      Rect Rand(0,800),Rand(0,600),Rand(100,200),Rand(100,200)
   Next
   
   SetBuffer BackBuffer()
   
   Return img

End Function


l8er,
PSY

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group