Seite 2 von 3

Re: Sprite laden funktioniert nicht

Verfasst: 10.04.2020 23:17
von Re57
Mittlerweile habe ich jetzt dank des wirklich ganz hervorragenden Handbuchs erstmals richtig verstanden, wie das geht mit den Buffers und was Clearscreen() und FlipBuffers() genau machen. Tatsächlich konnte ich jetzt sowohl jpg- als auch png-Sprites laden, wobei aber nur das jpg-Sprite korrekt angezeigt wurde, während das png-Sprite eine schwarze Fläche blieb. Hier jetzt der verbesserte Code:

Code: Alles auswählen

#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

If InitSprite() = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf  

If OpenWindow(1,0,0,1366,700,"",#Flags) = 0
  MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf  

If OpenWindowedScreen(WindowID(1),0,0,1366,700) = 0
  MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf 


  Repeat
     Event = WindowEvent()
     
     ClearScreen(RGB(0,0,0))
     
     StartDrawing(ScreenOutput())
     Box(0,0,1366,700,RGB(0,200,0)) ; grüner Hintergrund
     StopDrawing()
     
     UsePNGImageDecoder()
     LoadSprite(1, "C:\Users\lenovo\Desktop\Vsl.png")
     DisplaySprite(1,0,0)
     
     FlipBuffers() 
   Until Event = #PB_Event_CloseWindow 
End
Der grüne Hintergrund dient zur Sichtbarmachung der unvollständigen png-Sprite-Darstellung. Wenn das png-Sprite nun auch noch richtig zum Laufen gebracht werden könnte, wäre das natürlich super. Danke.

Re: Sprite laden funktioniert nicht

Verfasst: 10.04.2020 23:56
von HeX0R
Du hast es leider immernoch nicht so wirklich verstanden:
LoadSprite hat in der Schleife so überhaupt nix zu suchen!
Du ladest ein Sprite beim Initialisieren Deines Programms, und nicht bei jedem Schleifendurchlauf!

Genauso bei UsePNGImageDecoder()!
Das pappt man an den Kopf des ganzen Programms!
Es soll dem Compiler mehr oder weniger nur sagen, dass er die PNG Unterstützung mit einbinden soll, es ist völliger Quatsch, das immer und immer wieder innerhalb der Schleife aufzurufen (gut, PB ist so clever das eh nicht zu machen, es ist trotzdem einfach nur Blödsinn).

EIN simples WindowEvent() ist auch Quatsch!
So ein Fenster produziert unzählige Events, und wenn Du bei jedem Schleifendurchlauf immer nur eins aus der Eventqueue zupfst, führt das früher oder später zu Problemen.

JPG nimmt man üblicherweise nicht für Sprites!

Vielleicht solltest Du Dir noch so Sachen wie "DisplayTransparentSprite()" und "TransparentSpriteColor()" in der Hilfe anschauen.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 00:31
von Mijikai
Code fürs Timing nicht vergessen.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 00:48
von Re57
LoadSprite hat in der Schleife so überhaupt nix zu suchen!
Genau so war das auch in meinem Spiel, was ich 2006 mal programmiert hatte, die LoadSprite() Befehle waren alle vor der Repeat-Schleife, aber ich hatte dann jetzt eben einen kleinen Ausschnitt im Handbuch gedanklich falsch aufgefaßt.

WindowEvent() war jetzt rein experimentell und war mir im übrigen auch genau hier in diesem Thread so empfohlen worden. Daß normalerweise WaitWindowEvent() genommen wird, weiß ich.

OK, jpg-Sprite funktioniert jetzt und das reicht mir auch erstmal. Png-Sprite kann später mal dazu kommen und bestimmt gibt es hier im Forum auch lesenswerte Threads und Code-Beispiele dazu.

Danke nochmals an alle.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 01:07
von HeX0R
Re57 hat geschrieben:WindowEvent() war jetzt rein experimentell und war mir im übrigen auch genau so hier in diesem Thread empfohlen worden.
Nein, sicherlich nicht!
Ich bin hier jetzt raus.
Meine Antennen melden merkwürdige Schwingungen, muss nicht stimmen, aber es gibt ja auch noch andere hilfsbereite User hier.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 01:10
von Re57
Beitrag gelöscht.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 07:34
von Re57
WaitWindowEvent() würde ich nicht benutzen, sondern WindowEvent() - du musst ja im prinzip 60bilder pro sekunde Zeichnen und das geht nicht mit WaitWindowEvent()
@Hexor
War mir genau so hier empfohlen worden, damit du Bescheid weißt. Mein Anliegen mit dem png-Sprite hat sich erledigt.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 08:06
von #NULL
Hier hast du eine korrekte Eventbearbeitung:
https://www.purebasic.com/documentation ... en.pb.html

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 11:20
von Re57
Danke, ich habe mir den Code mal angesehen und weiß nun wieder, wie die Einbindung des Keyboards geht. Das konnte ich jetzt auch in meinem eigenen Test-Code realisieren. Aber einen Gewinn in Sachen png-Sprite-Darstellung konnte ich aus dem Muster-Beispiel nicht ziehen, im Gegenteil: Gibt es eine Möglichkeit, ein Programm so starten zu können, daß man von Anfang an jeden Arbeitsschritt Stück für Stück verfolgen kann? Ich habe nirgendwo finden können, wie das geht, weiß aber, daß ich früher in der PureBasic Version 4.00 Einzelschritt-Verfolgung gemacht hatte. Danke.

Re: Sprite laden funktioniert nicht

Verfasst: 11.04.2020 12:04
von mk-soft
F9 (Haltepunkt)