Sprite-Scrolling

Previous topic - Next topic

amarliani

Also, irgendwie steh ich gerade massiv auf dem Schlauch. Mein Problem:

Ich hab eine Reihe von (dummerweise unterschiedlich breiten) Sprites, die wie Wagen eines Zuges hintereinandergehängt werden sollen. Das Ganze soll dann am rechten Schirmrand "reinfahren", sprich lansam auftauchen, über den Schirm scrollen und dann links wieder verschwinden.

Nur: Wenn die Sprite-Kette z.B. 800px lang ist und ich 1024px Breite habe, müßte ich ja irgendwann anfangen, bei sag mal -200px zu zeichen, um den optischen Effekt, dass das Ganze links verschwindet, hinzukriegen. Geht das eigentlich? Bei mir hakt die Darstellung dann nämlich. Oder hat wer ne bessere Idee? Die naheliegende Idee, den Teil, der links raus ist, gar nicht darzustellen, ist schwer, weil wie gesagt die eigentlichen Sprites unterschiedlich breit sind.

Kosta

#1
Quote from: amarliani on 2009-Jan-19
Also, irgendwie steh ich gerade massiv auf dem Schlauch. Mein Problem:

Ich hab eine Reihe von (dummerweise unterschiedlich breiten) Sprites, die wie Wagen eines Zuges hintereinandergehängt werden sollen. Das Ganze soll dann am rechten Schirmrand "reinfahren", sprich lansam auftauchen, über den Schirm scrollen und dann links wieder verschwinden.

Nur: Wenn die Sprite-Kette z.B. 800px lang ist und ich 1024px Breite habe, müßte ich ja irgendwann anfangen, bei sag mal -200px zu zeichen, um den optischen Effekt, dass das Ganze links verschwindet, hinzukriegen. Geht das eigentlich? Bei mir hakt die Darstellung dann nämlich. Oder hat wer ne bessere Idee? Die naheliegende Idee, den Teil, der links raus ist, gar nicht darzustellen, ist schwer, weil wie gesagt die eigentlichen Sprites unterschiedlich breit sind.

Inwiefern hakt die Darstellung?
Ich hab das im Prinzip genauso bei mir programmiert. Und eigentlich hakt nichts..

Alle Gegner sind Types, bei denen ich die SizeX (Größe X) und SizeY (Größe Y) als Wert drin habe, und ich frage dann auch in der foreach Schleife immer ab, wenn ausserhalb negativer Size-X-größe (z.B. für negative x-Werte (raus aus linkem Schirm)), dann lösche Gegner..

Code (glbasic) Select
IF bug.x<-bug.sizex THEN DELETE bug

Im Beispiel ist bug.x der x-Wert des Gegners, bug.sizex ist die Größe -> d.h. bei einer Spritegröße von 125, fragt er in der IF-Schleife ob der aktuelle-X-Wert kleiner ist als -125
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

amarliani

Hatt ich mir eigentlich auch so ähnlich vorgestellt. Aber wenn ich das bei mir versuche, wird das Sprite, sobald ich negative x-Werte kriege, nach oben verschoben an x=0 gezeichnet. Äh?? Könnte vielleicht doch ein Problem meines Rechners sein? Ich teste mal auf einem anderen...

Kosta

#3
very strange....

Programmier dir doch ganz schnell mal ein Beispiel, mit einem Sprite, das du mit Cursor links/rechts verschieben kannst, und zusätzlich gibst du noch mit Print die x/y-Variablen deiner Figur an (oder als Debug-Meldung).

Dann siehst du ja ob das so komisch ist....

Code (glbasic) Select

GLOBAL x=40;y=180
LOADSPRITE "sprite.bmp", 10
WHILE TRUE
  IF KEY(203) = 1 THEN DEC x,1
  IF KEY(205) = 1 THEN INC x,1
  DRAWSPRITE 10,x,y
  PRINT "X: "+x+" Y: "+y,100,100
  SHOWSCREEN
WEND
END


Hast du im Spiel ein scrollbaren Hintergrund?  vielleicht hast du die falschen x-Werte kontrolliert?
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Schranz0r

Quote from: amarliani on 2009-Jan-20
Hatt ich mir eigentlich auch so ähnlich vorgestellt. Aber wenn ich das bei mir versuche, wird das Sprite, sobald ich negative x-Werte kriege, nach oben verschoben an x=0 gezeichnet. Äh?? Könnte vielleicht doch ein Problem meines Rechners sein? Ich teste mal auf einem anderen...

Zeig uns doch einfach mal deinen Code! Ferndiagnosen sind immer sehr schwer :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

amarliani

Danke für euer Mitgrübeln - aber es war ein Problem meines Rechners. Auf anderen Rechnern klappte es prima, so wie vorgesehen. Scheinbar hatte sich der Grafiktreiber verschluckt. Ich hab ne neue Version aus dem Net geladen, und nun gehts auch auf meiner ersten Maschine. Danke trotzem!