Sprite laden funktioniert nicht
Re: Sprite laden funktioniert nicht
Danke. Das Beispiel nutzt mir null Komma null in Sachen png-Sprites und ich will hier auch nicht länger nerven damit. Ich muß jetzt nach fast 10 Jahren Pause generell wieder auf die Beine kommen und dabei ist png-Sprite-Load nur eine ärgerliche Rand-Episode. Man muß sich ja nicht auf biegen und brechen verbeißen, und erst recht nicht dann, wenn so ein Beispiel-Code einen png-Sprite obendrein noch sogar ohne UsePNGImageDecoder() lädt, WOW. Ich will mit png-Sprites nichts mehr zu tun haben und früher ging es ja generell nur mit jpg.
Re: Sprite laden funktioniert nicht
Hallo Re57,
hier mal eine angepasste Version deines codes.
Du musst noch das Loadsprite ein-/auskommentieren, da mein sprite woanders liegt.
Man zeichent "in Ruhe" alles nötige auf den Buffer im Hintergrund und flippt ihn dann nach vorn, wenn alle Zeichenoperationen erledigt sind. Da kann er dann stundenlang ohne ein erneutes FlipBuffers() rumliegen und wird durchgehend auf dem Monitor angezeigt. Ist generell auch GPU schonender. Wenn man auf diese Weise eine Uhr mit Sekundenzeiger programmiert, dann muss die Szene nur 1 mal pro Sekunde geflippt werden.
Gruß Kurzer
hier mal eine angepasste Version deines codes.
Du musst noch das Loadsprite ein-/auskommentieren, da mein sprite woanders liegt.
Code: Alles auswählen
EnableExplicit
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
UsePNGImageDecoder()
If InitSprite() = 0
MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
End
EndIf
If OpenWindow(1,0,0,1366,700,"",#Flags) = 0
MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
End
EndIf
If OpenWindowedScreen(WindowID(1),0,0,1366,700) = 0
MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
End
EndIf
;LoadSprite(0, "C:\Users\lenovo\Desktop\Vsl.png")
LoadSprite(0, "D:\sprite.png")
StartDrawing(ScreenOutput())
Box(0,0,1366,700,RGB(0,200,0)) ; grüner Hintergrund
StopDrawing()
DisplaySprite(0, 300, 300)
FlipBuffers()
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Nein man muss nicht zwingend 60 mal pro Sekunde die ganze Szene neu zeichnen, wenn sich nichts darin ändert.GPI hat geschrieben:WaitWindowEvent() würde ich nicht benutzen, sondern WindowEvent() - du musst ja im prinzip 60bilder pro sekunde Zeichnen und das geht nicht mit WaitWindowEvent()
Man zeichent "in Ruhe" alles nötige auf den Buffer im Hintergrund und flippt ihn dann nach vorn, wenn alle Zeichenoperationen erledigt sind. Da kann er dann stundenlang ohne ein erneutes FlipBuffers() rumliegen und wird durchgehend auf dem Monitor angezeigt. Ist generell auch GPU schonender. Wenn man auf diese Weise eine Uhr mit Sekundenzeiger programmiert, dann muss die Szene nur 1 mal pro Sekunde geflippt werden.
Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Re: Sprite laden funktioniert nicht
Vielen Dank für die Code-Änderung und die weiteren Erklärungen zu LoadSprite() Ich hatte das nun so verstanden, daß ich versuchen sollte, die png-Datei unmittelbar zum dem Speicherort zu bringen, in welchem auch PureBasic selber liegt. Das habe ich ausprobiert, aber auch dann kam wieder die "not initialized"-Anzeige. Auch dann, wenn ich versuchsweise den ganzen Pfad zum neuen Speicherort angab. War gut gemeint, aber png-Sprite soll für mich erstmal kein weiteres Thema sein. Notfalls konvertiere ich einfach ganz wenige Sprites in jpg und damit kann ich dann arbeiten. Nochmals Danke.