Regen
-
Dare Devil
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Regen
Welche Moeglichkeiten gibt es, Regen moeglichst realistisch (durchsichtig) in einem 2D-JumpnRun darzustellen?
Hat jemand Tipps?
Hat jemand Tipps?
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
n_n"
also, meistens ist der regen bei 2D games nicht wirklich durchsichtig,
sondern ein sprite bei dem nur die umrisse gezeichnet werden,
eben in weiß oder grau oder so.
meistens nur kleine striche, die quer über den screen bewegt werden.
du könntest zwar runde bzw. tropfenförmige tropfen als Sprite3D erstellen,
und die mit dem entsprechenden BlendingMode drüberzeichnen,
dass sie halb durchsichtig erscheinen,
aber ob das dann besser aussieht wage ich zu bezweifeln.
also, meistens ist der regen bei 2D games nicht wirklich durchsichtig,
sondern ein sprite bei dem nur die umrisse gezeichnet werden,
eben in weiß oder grau oder so.
meistens nur kleine striche, die quer über den screen bewegt werden.
du könntest zwar runde bzw. tropfenförmige tropfen als Sprite3D erstellen,
und die mit dem entsprechenden BlendingMode drüberzeichnen,
dass sie halb durchsichtig erscheinen,
aber ob das dann besser aussieht wage ich zu bezweifeln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich glaube unter Donkey Kong Country gab's im zweiten Level Regen, das könntest Du Dir mal als Inspiration anschauen.

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
hier mal n Beispielcode von mir...
da fällt regen und "spritzt" auf dem Boden auch ^^
das kann man natürlich noch verbessern
da fällt regen und "spritzt" auf dem Boden auch ^^
das kann man natürlich noch verbessern
Code: Alles auswählen
InitSprite()
xP = 800
yP = 600
xP2 = xP/2
yP2 = yP/2
OpenWindow(0, 0, 0, xP, yP, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, xP, yP, 0, 0, 0)
CreateSprite(1, 20, 20)
StartDrawing(SpriteOutput(1))
Line(0,0,2,6,$504040)
Line(2,6,2,6,$807070)
Line(4,12,2,6,$B0A0A0)
Line(3,12,2,6,$807070)
StopDrawing()
CreateSprite(2, 20, 20)
StartDrawing(SpriteOutput(2))
Line(6,18,-5,-8,$A08080)
Line(6,18,-2,-10,$A08080)
Line(6,18,1,-12,$A08080)
Line(6,18,3,-7,$A08080)
StopDrawing()
Structure Tropfen
x.f
y.f
v.f
EndStructure
NewList Tropfen.Tropfen()
Repeat
Event = WindowEvent()
ClearScreen(0)
For n = 1 To 3
AddElement(Tropfen())
Tropfen()\x = Random(xP2*3)-xP2
Tropfen()\y = -32
Tropfen()\v = Random(5)/10+2
Next
ForEach Tropfen() : With Tropfen()
\x + 1*\v
\y + 3*\v
If \y > 582 :
DisplayTransparentSprite(2, \x, 582)
\x - 1*\v
EndIf
DisplayTransparentSprite(1, \x, \y)
If \y > 600 : DeleteElement(Tropfen()) : EndIf
EndWith : Next
FlipBuffers()
Until Event = #PB_Event_CloseWindow
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Dare Devil
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Perfekt!
Wenn du nichts dagegen hast uebernehme ich diesen Regen fuer mein Spiel.
edit:
Hab den Code nun zo verbessert, dass jede Aufloesung verwendbar ist, sie muss nur oben bei xP und yP veraendert werden:
Wenn du nichts dagegen hast uebernehme ich diesen Regen fuer mein Spiel.
edit:
Hab den Code nun zo verbessert, dass jede Aufloesung verwendbar ist, sie muss nur oben bei xP und yP veraendert werden:
Code: Alles auswählen
InitSprite()
InitSprite3D()
xP = 800
yP = 500
xP2 = xP/2
yP2 = yP/2
OpenWindow(0, 0, 0, xP, yP, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, xP, yP, 0, 0, 0)
CreateSprite(1, 20, 20)
StartDrawing(SpriteOutput(1))
Line(0,0,2,6,$504040)
Line(2,6,2,6,$807070)
Line(4,12,2,6,$B0A0A0)
Line(3,12,2,6,$807070)
StopDrawing()
CreateSprite(2, 20, 20)
StartDrawing(SpriteOutput(2))
Line(6,18,-5,-8,$A08080)
Line(6,18,-2,-10,$A08080)
Line(6,18,1,-12,$A08080)
Line(6,18,3,-7,$A08080)
StopDrawing()
Structure Tropfen
x.f
y.f
v.f
EndStructure
NewList Tropfen.Tropfen()
Repeat
Event = WindowEvent()
ClearScreen(0)
For n = 1 To 3
AddElement(Tropfen())
Tropfen()\x = Random(xP2*3)-xP2
Tropfen()\y = -32
Tropfen()\v = Random(5)/10+2
Next
ForEach Tropfen() : With Tropfen()
\x + 1*\v
\y + 3*\v
If \y > yP - 18 :
DisplayTransparentSprite(2, \x, yP-18)
\x - 1*\v
EndIf
DisplayTransparentSprite(1, \x, \y)
If \y > yP : DeleteElement(Tropfen()) : EndIf
EndWith : Next
FlipBuffers()
Until Event = #PB_Event_CloseWindow
jo nimm ruhig, dafür habe ich ihn ja gecodet
Achso:
Ich habe ihn natürlich nicht in "aktion" geschreiben, soll heißen, da es sehr viele Sprites sind die da Displayt werden, könnte es irgendwann laggen ...
Lösungen wäre :
Alle in Sprite3D zu machen, und dann in Start3D() einzubinden, das wäre vllt schneller.
Sprite3D solltest du ja dann eh verwenden wenn du den Regen noch halbtransparent haben willst ...
Achso:
Ich habe ihn natürlich nicht in "aktion" geschreiben, soll heißen, da es sehr viele Sprites sind die da Displayt werden, könnte es irgendwann laggen ...
Lösungen wäre :
Alle in Sprite3D zu machen, und dann in Start3D() einzubinden, das wäre vllt schneller.
Sprite3D solltest du ja dann eh verwenden wenn du den Regen noch halbtransparent haben willst ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Dare Devil
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Heisst das, wenn ich andere 2D-Sprites in meinem Spiel benutzt diese laggen?
Sollte man generell nur 3D-Sprites fuer Spiele benutzen?
Benutze eigtl.ur 2D-Sprites und wollte dies eigtl. durch SpecialFX() und DisplayTranslucentSprite() machen - aber ne Konvertierung durch 3D-Sprites wuerde auch gehn. Fragt sich nur wie ich das alles miteinander verbinde...
Sollte man generell nur 3D-Sprites fuer Spiele benutzen?
Benutze eigtl.ur 2D-Sprites und wollte dies eigtl. durch SpecialFX() und DisplayTranslucentSprite() machen - aber ne Konvertierung durch 3D-Sprites wuerde auch gehn. Fragt sich nur wie ich das alles miteinander verbinde...
SpecialFX( ist unglaublich langsam (im gegensatz zu Start3D)
Und da DisplaySprite3D eh einen transparentswert hat, wäre das auf jedenfall sinnvoller.
Sprite3D heißt ja nicht unbedingt das du 3D hast, es ist nur schneller weil es DX7 verwendet.
Mein Rat: Mache alle Sprite2D zu Sprite3D (und halt die Start3D() sache mit einbauen)
Und da DisplaySprite3D eh einen transparentswert hat, wäre das auf jedenfall sinnvoller.
Sprite3D heißt ja nicht unbedingt das du 3D hast, es ist nur schneller weil es DX7 verwendet.
Mein Rat: Mache alle Sprite2D zu Sprite3D (und halt die Start3D() sache mit einbauen)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
... wobei ein Haufen 2D sprites immer noch schneller ist als wenn man Draw benutzt ...
Zuletzt geändert von Kaeru Gaman am 12.12.2008 16:12, 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.
+ 
