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 »

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.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Sprite laden funktioniert nicht

Beitrag 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.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag 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.
Zuletzt geändert von Re57 am 11.04.2020 01:08, insgesamt 1-mal geändert.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Sprite laden funktioniert nicht

Beitrag 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.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag von Re57 »

Beitrag gelöscht.
Zuletzt geändert von Re57 am 11.04.2020 07:42, insgesamt 1-mal geändert.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag 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.
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Sprite laden funktioniert nicht

Beitrag von #NULL »

Hier hast du eine korrekte Eventbearbeitung:
https://www.purebasic.com/documentation ... en.pb.html
my pb stuff..
Bild..jedenfalls war das mal so.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite laden funktioniert nicht

Beitrag 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.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Sprite laden funktioniert nicht

Beitrag von mk-soft »

F9 (Haltepunkt)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten