Wie lasse ich ein bild weiterscrollen???

Anfängerfragen zum Programmieren mit PureBasic.
fighterforjesus
Beiträge: 3
Registriert: 08.04.2005 14:17

Wie lasse ich ein bild weiterscrollen???

Beitrag von fighterforjesus »

Ich wollte fragen wie ich einen Hintergrund weiterscroolen lassen kann, wenn z.B. eine Figur in die nähe des Bildschirmrandes kommt.
MfG fighterforjesus

PS: GOD BLESS YOU!!!

<a href="http://www.christeens.de" target="_blank"><img src="http://christeens.pm-ws.de/banner_1.jpg" alt="" border="0"></a>
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

Beitrag von Lukas-P »

Dann musßt du einfach die Figur und den Rest bewegen
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@ffj

wie ist denn dein hintergrund aufgebaut?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
fighterforjesus
Beiträge: 3
Registriert: 08.04.2005 14:17

Beitrag von fighterforjesus »

ich hab noch kein bild wollte aber ca. 4096*768 nehmen(falls das geht)
MfG fighterforjesus

PS: GOD BLESS YOU!!!

<a href="http://www.christeens.de" target="_blank"><img src="http://christeens.pm-ws.de/banner_1.jpg" alt="" border="0"></a>
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Code: Alles auswählen

If figurx > 800
figurx = figurx - 10
bgx = bgx - 10
EndIf
wenn die figur über die 800 Pixelmarke hinauskommt wird sie und der hintergrund 10 pixel nach links verschoben.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
fighterforjesus
Beiträge: 3
Registriert: 08.04.2005 14:17

Beitrag von fighterforjesus »

@Kaeru Gaman

ich verstehe es jetz müssen wir es nur noch ans spiel angleichen dann passt das ich danke dir für deine Hilfe
MfG fighterforjesus

PS: GOD BLESS YOU!!!

<a href="http://www.christeens.de" target="_blank"><img src="http://christeens.pm-ws.de/banner_1.jpg" alt="" border="0"></a>
Antworten