Sprites langsam einblenden

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Sprites langsam einblenden

Beitrag 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
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: Sprites langsam einblenden

Beitrag 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

Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Sprites langsam einblenden

Beitrag 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.
PB 6.10
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Re: Sprites langsam einblenden

Beitrag 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
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Sprites langsam einblenden

Beitrag von TroaX »

BBCode. BBCode hat Code Tags, die den Code zumindest sauber formatiert in Beiträgen anzeigen können.
app.php/help/bbcode#f2r1
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Sprites langsam einblenden

Beitrag 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.
PB 6.10
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Sprites langsam einblenden

Beitrag von NicTheQuick »

Du kannst auch sehen wie es andere hier machen, indem du ihre Posts zitierst.
Antworten