fighterforjesus hat geschrieben:ich hab noch kein bild wollte aber ca. 4096*768 nehmen(falls das geht)
nun, aus den meisten Graka geht es nicht, ein Sprite anzuzeigen (oder davon zu clippen),
das größer als der Screen ist.
da du eine höhe von 768 angibst, nehme ich mal an, daß du auf einem 1024x768 Screen arbeiten willst.
du könntest jetzt mit 4 Bildern à 1024x768 arbeiten, müsstest davon immer 2 anzeigen
(oder fast immer: in 1023 von 1024 Fällen)
du sparst etwas speicherarbeit, wenn du mit 8 Bildern à 512x768 arbeitest,
davon musst du dann immer 3 anzeigen, das wären 25% weniger.
du kannst ein großes Blid erstellen, und dann in 8 Teile schneiden, die du in 8 Sprites lädst.
das nur mal allgemein, dir ging es ja ums scrolling.
zigapeda hat da ja schon was angedeutet.
für die anzeige des hintergrundes nimmst du eben keinen festen wert [z.b. DisplaySprite(Nr, -13, 0)],
sondern eine Variable, z.b. BackX (zigapeda: bgx (BackGround X-koordinate))
(wie du sie letztendlich nennst, bleibt dir überlassen)
also DisplaySprite(Nr, BackX, 0) (*)
(*)
mit mehreren Bildteilen wird das noch etwas anders, aber eins nach dem anderen
jetzt kanst du durch veränderung von BackX beeinflussen, welcher abschnitt des Bildes angezeigt wird.
im beispiel von zigapeda würden Bild und Player bei erreichen eines Randes
um 10 pixel nach links
springen, du willst aber wohl einen 'reinscroll'-effekt.
also brauchst du noch einen Zähler, der das reinscrollen für einen Moment ablaufen lässt.
(eine geschlossene Schleife bringt nichts, weil du ja auch jeden Schritt anzeigen musst)
ich gehe bei diesem Beispiel mal davon aus, dass du die spielfigur um jeweils 1 pixel seitwärts bewegst.
Code: Alles auswählen
If KeyboardPushed(#PB_Key_Right)
PlayerX = PlayerX +1
EndIf
die bewegung beim scrollen muss schneller ablaufen,
sonst 'schiebt' die spielfigur nur den rand vor sich her.
deshalb nehm ich hier mal ne differenz von 2.
(wenn deine spielfigur sich um 2 bewegt, nimmst du 3 oder 4,
wenn sie sich um 3 bewegt, nimmst du 5 oder 6,
wenn 4, dann 6 o. 7 o. 8, etc. etc.pp.)
folgende vorgehensweise: wenn die spielfigur einen randbereich berührt,
setzt du ein Flag, um scrolling zu aktivieren (hier: ScrollOn),
setzt einen Counter hoch, der die dauer des scrollings steuert (hier: ScrollCount)
als Randbereich nehm ich mal 128pixel, das passt gut für ein 64pix breites playersprite.
Code: Alles auswählen
If PlayerX > 896 ; 1024 minus 64pix Rand und 64pix Player-Breite
ScrollOn = 1
ScrollCount = 128
EndIf
ich setze hier ScrollCount auf 128, da ich gleich um 2 pixel pro Schritt scrolle,
bedeutet das, dass der Hintergrund insgesamt um 256pixel weitergescrollt wird.
Code: Alles auswählen
If ScrollOn <> 0
If ScrollCount > 0
ScrollCount = ScrollCount -1
BackX = BackX -2*ScrollOn
PlayerX = PlayerX -2*ScrollOn
Else
ScrollOn = 0
EndIf
EndIf
wahrscheinlich wunderst du dich, warum ich mit ScrollOn multipliziere.
das mache ich, damit das scrolling in beide Richtungen funktioniert.
bei erreichen des linken Randes machen wir:
Code: Alles auswählen
If PlayerX < 64 ; der 64pix Rand OHNE die Player-Breite
ScrollOn = -1
ScrollCount = 128
EndIf
damit legt ScrollOn auch die Richtung fest:
ScrollOn = 1 -> nach links scrollen (rechter Rand)
ScrollOn = -1 -> nach rechts scrollen (linker Rand)
ScrollOn = 0 -> nicht scrollen.
das ist erstmal die theorie soweit, hier ist noch kein check drin, ob das bild zuende ist,
und auch nicht die darstellung der mehreren Teilbilder.
ich bitte erstmal um Echo, ob du das soweit verstehen konntest,
ich hoffe, ich habs nicht zu kompliziert gemacht.