image scrollen und immerwieder loopen?
image scrollen und immerwieder loopen?
hallo,
ich lade ein bild(bmp) und lasse das mittels displaysprite (1,x-1,100) nach links scrollen...
jetzt frage ich mich, wie ich es am elegantesten hinbekommen, daß das bild ständig geloopt wird? das also, sobald das geladene bild kleiner wird(läuft ja nach links raus), als auf dem bildschirm angezeigt,dieses wieder rangehangen wird (ohje, was für ein satz)
hoffe ihr versteht?
im grundegenommen, soll das geladene hintergrundbild ständig wieder rangehangen werden, damit es eben permanent scrollen kann:
also eigenlich so ---> Bild1+Bild1+Bild1 etc.
gibt es da eine elegante einfache art ?
ich möchte das bild aber nicht unbedingt als 27890*800 Bild anlegen oder so
Gruß+Danke
XVerbatim
ich lade ein bild(bmp) und lasse das mittels displaysprite (1,x-1,100) nach links scrollen...
jetzt frage ich mich, wie ich es am elegantesten hinbekommen, daß das bild ständig geloopt wird? das also, sobald das geladene bild kleiner wird(läuft ja nach links raus), als auf dem bildschirm angezeigt,dieses wieder rangehangen wird (ohje, was für ein satz)
hoffe ihr versteht?
im grundegenommen, soll das geladene hintergrundbild ständig wieder rangehangen werden, damit es eben permanent scrollen kann:
also eigenlich so ---> Bild1+Bild1+Bild1 etc.
gibt es da eine elegante einfache art ?
ich möchte das bild aber nicht unbedingt als 27890*800 Bild anlegen oder so
Gruß+Danke
XVerbatim
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
änder bitte im titel den begriff "image" in "sprite"!
also, du nimmst dir dasselbe sprite ein zweites mal und setzt es einfach rechts nochmal dran.
du benötigst das sprite nur ein einziges mal, aber stellst es halt so oft nebeneinander dar,
wie du benötigst um den bereich den du brauchst zu füllen.
im grunde ist es dasselbe prinzip wie ene tileengine, nur eben mit zwei sehr großen tiles.
(scheiße, da ist mir doch die IDE abgestürzt.... das hatte ich noch nie... nu pech, gibts halt kein beispiel...)
ich hatte vor ner weile schon mal nen beispiel gepostet, da hatte ich das selbe sprite recht oft verwendet...
[edit]
so, das beispiel war hier:
http://www.purebasic.fr/german/viewtopi ... 055#135055
also, du nimmst dir dasselbe sprite ein zweites mal und setzt es einfach rechts nochmal dran.
du benötigst das sprite nur ein einziges mal, aber stellst es halt so oft nebeneinander dar,
wie du benötigst um den bereich den du brauchst zu füllen.
im grunde ist es dasselbe prinzip wie ene tileengine, nur eben mit zwei sehr großen tiles.
(scheiße, da ist mir doch die IDE abgestürzt.... das hatte ich noch nie... nu pech, gibts halt kein beispiel...)
ich hatte vor ner weile schon mal nen beispiel gepostet, da hatte ich das selbe sprite recht oft verwendet...
[edit]
so, das beispiel war hier:
http://www.purebasic.fr/german/viewtopi ... 055#135055
Zuletzt geändert von Kaeru Gaman am 14.02.2007 12:31, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
jap, gibt es.
Man macht ne schleife in der das Bild soviel mal, wie es auf den Screen past, nebeneinander dargestellt wird plus einem mal extra.
Dann baut man da für jedes Sprite die Laufvariable ein, wenn sie die größe des Sprites erreicht hat wird dann per if scroll > spritewidth(0)-1: scroll = 0:endif das ganze auf Null gesetzt. Dadurch scheint es als ob die Sprites kontinuierlich durchscrollen.
Man macht ne schleife in der das Bild soviel mal, wie es auf den Screen past, nebeneinander dargestellt wird plus einem mal extra.
Dann baut man da für jedes Sprite die Laufvariable ein, wenn sie die größe des Sprites erreicht hat wird dann per if scroll > spritewidth(0)-1: scroll = 0:endif das ganze auf Null gesetzt. Dadurch scheint es als ob die Sprites kontinuierlich durchscrollen.
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"StandartScreen")
;-Sprite erstellen und was reinmalen
CreateSprite(0,128,128)
StartDrawing(SpriteOutput(0))
FillArea(0,0,222,RGB(255,0,0))
Box(1,1,126,126,RGB(0,255,255))
StopDrawing()
Global scroll.l
Repeat
ExamineKeyboard()
;Bildlaufvariable scroll
scroll + 1
;Wenn größer als 127 dann ist es wieder 0
If scroll > 127
scroll = 0
EndIf
;die 9 Sprites hinereinander weg darstellen
For x = 0 To 8
DisplaySprite(0,x*128-scroll,128)
Next
;-Bildschirm zeichnen und löschen
FlipBuffers(1)
ClearScreen(0)
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()I´a dllfreak2001
..naja, hab mir soviel mühe gegeben, mit meinen PB-2D-Drawing-Sternen, drum ladt ich's noch hier ab.
@xverbatim
falls du mit dem offset_x%#sprite_w nix anfangen kannst..
dies stellt einfach sicher, dass offset_x immer im bereich 0-#sprite_w bleibt.
also 143%100 würde z.b. 43 ergeben.
Code: Alles auswählen
InitSprite()
InitKeyboard()
#screen_w=1024
#screen_h=768
OpenScreen(#screen_w,#screen_h,32,"fllscrn")
#sprite_w=300
#sprite_h=200
CreateSprite(0, #sprite_w,#sprite_h)
StartDrawing( SpriteOutput(0) )
For i=0 To 30
x=Random(#sprite_w-1)
y=Random(#sprite_h-1)
Circle( x,y, 5+Random(5), RGB(0,0,5+Random(10)) )
Circle( x,y, 3, RGB(10,10,10+Random(20)) )
Plot( x,y, RGB(50,50,50+Random(200)) )
Next
StopDrawing()
Repeat
ExamineKeyboard()
For i = -#sprite_w To #screen_w+#sprite_w Step #sprite_w
For k = -#sprite_h To #screen_h+#sprite_h Step #sprite_h
DisplaySprite(0, offset_x + i, offset_y + k )
Next
Next
If KeyboardPushed(#PB_Key_Right):: offset_x-4 :: offset_x%#sprite_w :: EndIf
If KeyboardPushed(#PB_Key_Left) :: offset_x+4 :: offset_x%#sprite_w:: EndIf
If KeyboardPushed(#PB_Key_Up) :: offset_y+4 :: offset_y%#sprite_h:: EndIf
If KeyboardPushed(#PB_Key_Down) :: offset_y-4 :: offset_y%#sprite_h:: EndIf
FlipBuffers()
ClearScreen(0)
Until KeyboardReleased(#PB_Key_Escape)
falls du mit dem offset_x%#sprite_w nix anfangen kannst..
dies stellt einfach sicher, dass offset_x immer im bereich 0-#sprite_w bleibt.
also 143%100 würde z.b. 43 ergeben.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
uii danke für die schnelle Hilfe
Vielen Dank für die schnelle Hilfe...
Dann nochmal eine kurze Frage, wenn ich z.B. die POSL Datei bzw. die PBOSL_AnimSprite von Danilo in meinem Programm nutze und alles kompiliere, ist diese dann fest im Programm ?
oder muß ich die mitgeben bzw. muß die im Hauptordner des erstellten Programms sein oder Systemordner von Windows?
Bei VB ist mir das klar, nur bei Purebasic bin ich mir da nicht so sicher und frage mal blond
)
Würde mich über Antwort freuen
+ Großes LOB HIER AN DIESES FORUM !
FINDET MAN NICHT ÜBERALL DIESE SCHNELLE UND VOR ALLEM KOMPETENTE HILFE ....will ja keine Namen nennen, aber da gibt es Foren ;-( nungut, nicht mit dem hier zu vergleichen !!! ALSO DICKES LOB AN ALLE
)
Gruß
XVERBATIM
Dann nochmal eine kurze Frage, wenn ich z.B. die POSL Datei bzw. die PBOSL_AnimSprite von Danilo in meinem Programm nutze und alles kompiliere, ist diese dann fest im Programm ?
oder muß ich die mitgeben bzw. muß die im Hauptordner des erstellten Programms sein oder Systemordner von Windows?
Bei VB ist mir das klar, nur bei Purebasic bin ich mir da nicht so sicher und frage mal blond
Würde mich über Antwort freuen
+ Großes LOB HIER AN DIESES FORUM !
FINDET MAN NICHT ÜBERALL DIESE SCHNELLE UND VOR ALLEM KOMPETENTE HILFE ....will ja keine Namen nennen, aber da gibt es Foren ;-( nungut, nicht mit dem hier zu vergleichen !!! ALSO DICKES LOB AN ALLE
Gruß
XVERBATIM
ok, danke für die Antwort (end of message) gruß xverbatim
ok, danke für die Antwort gruß xverbatim
