Aktuelle Zeit: 09.07.2020 11:16

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 12:47 
Offline

Registriert: 10.04.2020 12:19
Hallo, ich hatte vor Jahren schonmal mit PureBasic ein paar Programme geschrieben, aber jetzt muß ich doch einigermaßen wieder von vorne anfangen. Ich hatte damals auch mal ein kleines Spiel mit Sprites geschrieben, aber der Code dazu ist leider auf meiner kaputten externen Festplatte geblieben.

Nun wollte ich wiedermal LoadSprite() und DisplaySprite() auspropieren. Das Test- .png wird aber nicht geladen, obwohl der Pfad stimmt. Wie kommt das? Hier der Code-Anfang:

Code:
#Window1 = 1
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

InitSprite()
OpenWindow(#Window1,0,0,1366,700,"",#Flags)
OpenWindowedScreen(WindowID(1),0,0,1366,700)

LoadSprite(0, "C:\Users\Anderer\Desktop\Viertel.png")
DisplaySprite(0,50,450)

….


Ich weiß, daß normalerweise das Arbeiten mit If .. Endif empfohlen wird für OpenWindow(), InitSprite() usw., aber das hatte ich schon früher nicht gemacht zugunsten von besserer Übersicht. Danke für Info.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 13:29 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Da du dort ein PNG versuchst zu laden, benötigst du UsePNGImageDecoder()

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 14:01 
Offline

Registriert: 10.04.2020 12:19
Danke.

Edit: Mein Windows-Problem von vorhin (ich konnte plötzlich selber nicht mehr auf Fotos zugreifen) ist jetzt gelöst und jetzt trage ich hier nochmal meinen Test-Code ein. Der Pfad zur .png-Datei stimmt, aber trotzdem wird dann immer angezeigt: "The specified #sprite is not initialized". Allerdings fällt mir da noch etwas ein: Ich hatte gestern, nachdem ich in PureBasic-Anleitung gelesen hatte, irgendetwas gelesen mit der Einstellung 16, 24 oder 32 und hatte dann 16 eingestellt, Ich weiß nicht mehr, was das war, aber vielleicht klingelt da bei dem einen oder anderen etwas, der hier mitliest. Wahrscheinlich habe ich da einen Fehler gemacht. Hier jetzt nochmal der Code:

Code:
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

InitSprite()

OpenWindow(1,0,0,1366,700,"",#Flags)
OpenWindowedScreen(WindowID(1),0,0,1366,700)
   
   LoadSprite(1, "C:\Users\lenovo\Desktop\Viertel.png")
   UsePNGImageDecoder()
   DisplaySprite(1,50,450)     
         
   Repeat
   Event = WaitWindowEvent()
   
   FlipBuffers()
   Until Event = #PB_Event_CloseWindow 
   End


Wieso kommt da die Fehlanzeige von "not initialized"? Was FlipBuffers() angeht, wußte ich übrigens auch noch nie, wo man das am besten hin schreibt. Danke für Info.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 16:48 
Offline

Registriert: 29.08.2004 13:18
WaitWindowEvent() würde ich nicht benutzen, sondern WindowEvent() - du musst ja im prinzip 60bilder pro sekunde Zeichnen und das geht nicht mit WaitWindowEvent()

und UsePNGImageDecoder() solltest du am besten ganz am Anfang reinschreiben, nicht nachdem du es benutzten wolltest.
Üblicherweise ist das bei mir so ziemlich eines der ersten Befehle in Quellcode

Hauptschleife wäre bei mir ungefähr so

Code:
repeat
  Repeat
    Event=WindowEvent()
    ;eventauswertung
  until event=#null

  ;zeichnen
  delay(0)
  flipbuffers()
until event=#pb_event_closewindow

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 17:43 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
@GPI
Dein closeWindow beendet das Programm aber nur, wenn es zufällig das letzte Event in der Eventschleife war. Besser in 'eventauswertung' bei closeWindow ein Flag setzen und dies dann in der äußeren Schleife testen um zu beenden.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 18:32 
Offline

Registriert: 10.04.2020 12:19
Danke, das hat mich jetzt tatsächlich ein kleines Stück weitergebracht. Mein kleiner Testcode sieht jetzt so aus:

Code:
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

InitSprite()

OpenWindow(1,0,0,1366,700,"",#Flags)
OpenWindowedScreen(WindowID(1),0,0,1366,700)

StartDrawing(ScreenOutput())
Box(0,0,1366,700,RGB(0,150,0))
StopDrawing()

   UsePNGImageDecoder()
   LoadSprite(1, "C:\Users\lenovo\Desktop\Viertel.png")
   DisplaySprite(1,150,150)     
     
 Repeat
   Event = WindowEvent()
   Delay(1)
   FlipBuffers()
 Until Event = #PB_Event_CloseWindow 
 End


Es kommt jetzt zu keiner Fehlermeldung mehr und die grüne Hintergrundfarbe sorgt jetzt dafür, daß das Sprite überhaupt sichtbar wird, wenngleich aber leider nur als schwarze Fläche. Wenn ich statt WindowEvent() + Delay(1) WaitWindowsEvent(1) verwende, funktioniert das auch. Die jetzige Ausgabe des Programms kommt aber genauso auch komplett ohne FlipBuffers() im Code, das läßt doch dann evtl. vermuten, daß FlipBuffers() aus irgendeinem Grund überhaupt nicht greift.

Ich hatte dann auch noch versucht, ein jpg-Sprite zu laden, aber das führte wieder zu der "not initialized" Fehlermeldung, egal, ob ich mit UseJPEG2000IMAGEDecoder arbeitete oder nicht. Danke für weitere Hilfe.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 20:06 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Das wäre wohl der richtige Moment mal ins Handbuch zu schauen,
... oder sich die Beispiele der Kollegen genauer anzuschauen (Tipp: ;zeichnen)

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 20:27 
Offline

Registriert: 29.08.2004 13:18
aus eigener Erfahrung:

Nie, nie, NIEMALS auf den Screen zeichnen "StartDrawing(ScreenOutput())" - das verursacht nur Probleme und ist saulangsam.
Es gibt ein ClearScreen-Command (oder so ähnlich), damit kannst du den Bildschirm schnell löschen.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 21:26 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Die Eventbearbeitung braucht eine eigene Schleife. Du musst pro Hauptschleifendurchgang alle Events in einer eigenen/nested Schleife abarbeiten (siehe code von GPI) und erst dann Flipbuffers aufrufen.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite laden funktioniert nicht
BeitragVerfasst: 10.04.2020 21:40 
Offline

Registriert: 10.04.2020 12:19
Zitat:
Du musst pro Hauptschleifendurchgang alle Events in einer eigenen/nested Schleife abarbeiten (siehe code von GPI


Das hatte aber auch nicht funktioniert mit dem Code von GPI und nebenbei reagierte dann auch nicht mehr Event_CloseWindow.

Zitat:
nie, nie, Niemals auf den Screen zeichnen


Das kannte ich bisher nur mit direkt aufs Fenster zeichnen (weil dann alles weg ist, wenn man das Fenter an der oberen Leiste verschiebt). Ich lese jetzt erst nochmal im Handbuch. Danke.


Zuletzt geändert von Re57 am 10.04.2020 23:19, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 13 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye