Sprite laden funktioniert nicht

Anfängerfragen zum Programmieren mit PureBasic.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag von Re57 »

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.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Sprite laden funktioniert nicht

Beitrag von Kurzer »

Hallo Re57,

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
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()
Nein man muss nicht zwingend 60 mal pro Sekunde die ganze Szene neu zeichnen, wenn sich nichts darin ändert.
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 2023: 56 Jahre.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag von Re57 »

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.
Antworten