Seite 1 von 1

Sprites langsam einblenden

Verfasst: 16.07.2025 09:38
von irobot
Guten Tag zusammen,

habe das noch nicht so richtig verstanden: wie muss ich das anstellen, wenn ich nach

OpenWindow(0, 0, 0, x, y, "Jump-and-Run Animation", #PB_Window_SystemMenu | #PB_Window_Invisible | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, x, y, 0, 0, 0, #PB_Screen_WaitSynchronization)

all diese

DisplaySprite(1, 0, 0)
DisplaySprite(2, 0, 0)
DisplaySprite(3, 0, 0)
...
FlipBuffers()

nicht plötzlich erscheinen (das klappt schon ganz gut), sondern, nachdem alle Sprites auf dem noch nicht zu sehenden Window drauf sind, ich dieses LANGSAM einblenden will?

Da ich kein PureBasic-Profi bin, würde mir eine "verstehbare" Erklärung sehr helfen.

Besten Dank im voraus für eure Kommentare!

Grüsse
irobot

Re: Sprites langsam einblenden

Verfasst: 16.07.2025 15:48
von Axolotl
HI irobot,
zuerst mal, bitte verwende doch die "Code-Tags" und mit einem lauffähigen Code würde auch das helfen mehr Spaß machen.

Ich habe mal das Hilfe Beispiel von OpenWindowedScreen() dahingehend erweitert, dass das Sprite erst nach 2 s erscheint und durch Butten "Hide" auch wieder für 2 s verschwinden kann.
Alternativ wäre auch ein/mehrere Timer möglich.
Vielleicht hilft es dir ja.

Code: Alles auswählen

Global time.q, interval.q, bVisible 

If InitSprite() = 0
  MessageRequester("Error", "Can't open screen & sprite environment!", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 220, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(0, 170, 135, 45, 20, "Quit")
  ButtonGadget(1, 170, 105, 45, 20, "Hide")

  If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
    CreateSprite(0, 20, 20)
    If StartDrawing(SpriteOutput(0))
      Box(0, 0, 20, 20, RGB(255, 0, 155))
      Box(5, 5, 10, 10, RGB(155, 0, 255))
      StopDrawing()
    EndIf
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
    End
  EndIf
EndIf

interval = 2000 ; 2 s 
time = ElapsedMilliseconds() 
direction = 2
Repeat
  ; It's very important to process all the events remaining in the queue at each frame
  ;
  Repeat
    Event = WindowEvent()
    
    Select Event 
      Case #PB_Event_Gadget
        Select EventGadget() 
          Case 0
            End
          Case 1 
            bVisible = #False   
        EndSelect 
      
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0

  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))

  If ElapsedMilliseconds() - time > interval 
    bVisible = #True 
    time = ElapsedMilliseconds() 
  EndIf 

  If bVisible = #True 
    DisplaySprite(0, x, x)
  EndIf 

  x + direction
  If x > 140 : direction = -2 : EndIf
  If x < 0   : direction =  2 : EndIf
  Delay(1)
ForEver


Re: Sprites langsam einblenden

Verfasst: 16.07.2025 18:15
von H.Brill
irobot hat geschrieben: 16.07.2025 09:38 nicht plötzlich erscheinen (das klappt schon ganz gut), sondern, nachdem alle Sprites auf dem noch nicht zu sehenden Window drauf sind, ich dieses LANGSAM einblenden will?
Ich glaube, er sucht so eine Art Fading für seine Sprites. Vielleicht kann man etwas mit

Code: Alles auswählen

DisplayTransparentSprite()
und der Intesität ( 0 - 255) und einem Timer was anfangen. Die Intesität müßte dann in eine Variable
(Start mit 0) und bei einem Timerereignis dann bis 255 hochgezählt werden.

Da wäre dann etwas Rumprobieren bis zum gewünschten Ergebnis notwendig.

Re: Sprites langsam einblenden

Verfasst: 17.07.2025 11:21
von irobot
mittels

DisplayTransparentSprite(spritenummer, 0, 0, intensitaet)

krieg ich das hin!

Dank an euch allen!

BTW, das mit den "Code-Tags" hab ich nicht begriffen.
Was muss ich tun, damit gewisse Ausschnitte hier wie Code aussehen?

Grüsse
irobot

Re: Sprites langsam einblenden

Verfasst: 17.07.2025 11:40
von TroaX
BBCode. BBCode hat Code Tags, die den Code zumindest sauber formatiert in Beiträgen anzeigen können.
app.php/help/bbcode#f2r1

Re: Sprites langsam einblenden

Verfasst: 17.07.2025 12:49
von H.Brill
Schreib doch einfach eckige Klammer ([) auf und das Wort code dahinter und eckige Klammer (]) zu.
dann dein Code
Am Schluß das gleiche wie am Anfang, jedoch vor dem Wort code noch ein Slash (/) dazu.

Re: Sprites langsam einblenden

Verfasst: 17.07.2025 17:08
von NicTheQuick
Du kannst auch sehen wie es andere hier machen, indem du ihre Posts zitierst.