Parallax Scrolling
Übersicht

![]() |
SkabusBetreff: Parallax Scrolling |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder benutz einfach Tileimage oder Tileblock.
Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.. ![]() Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
TheProgrammer hat Folgendes geschrieben: Hatte gerade Langeweile.. ![]() Mfg TheProgrammer Hey, recht herzlichen Dank ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group