image scrollen und immerwieder loopen?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

image scrollen und immerwieder loopen?

Beitrag von xverbatim »

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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ä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
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.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

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.


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
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

..naja, hab mir soviel mühe gegeben, mit meinen PB-2D-Drawing-Sternen, drum ladt ich's noch hier ab. 8)

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)
@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.
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@#NULL

sehr schöner effekt mit den sternen. :allright:

auch die umsetzung ist sehr gut, da sie durch die konstanten und
die veränderlichen schleifengrößen sehr allgemeingültig ist. :D
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

uii danke für die schnelle Hilfe

Beitrag von xverbatim »

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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

UserLibs brauchst du nicht mitgeben, wenn dann nur die DLL,
die dort aber nicht vorhanden ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

ok, danke für die Antwort (end of message) gruß xverbatim

Beitrag von xverbatim »

ok, danke für die Antwort gruß xverbatim
Antworten