Wie arbeiten mit CatchSprite() u. DataSection?

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

Wie arbeiten mit CatchSprite() u. DataSection?

Beitrag von Re57 »

Hallo, nachdem IncludeBinary von Sounds über CatchSound() proplemlos funktioniert hat, geht da mit genau demselben Verfahren bei Sprites und CatchSprite() gar nichts. Die Sprites kommen nicht in der DataSection an und das Programm kann später nicht mehr mit den Sprites arbeiten, aber es gibt keinerlei Fehlermeldungen. Muß da noch irgendwas rein mit *Buffer oder UsePNGImageEncoder? Die Hilfe über F1 macht da vage Andeutungen und im Referenzbuch steht gar nichts zum Thema CatchSprite() Hier mein Versuch:

Code: Alles auswählen

InitSprite()

UsePNGImageDecoder
LoadSprite(1,"C:/Users/lenovo/Documents/kr1.png",#PB_AlphaBlending)

CatchSprite(1,?kr1)

DataSection
  kr1:
  IncludeBinary "kr1.png"
EndDataSection
Was muß da noch ergänzt werden? So jedenfalls klappt es nicht. Danke.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Wie arbeiten mit CatchSprite() u. DataSection?

Beitrag von Bisonte »

Da sehe ich 2 Fehler ;)

1. UsePNGImageDecoder benötigt noch () am Ende ;)

und 2. der wohl wichtige in deinem Fall

Das Image, dass du da per IncludeBinary einfügst hat keinen Pfad.
Bist du dir sicher!, dass die Datei kr1.png wirklich im gleichen Verzeichnis wie deine Exe liegt ?
Ansonsten :

Code: Alles auswählen

InitSprite()

UsePNGImageDecoder()

;LoadSprite(1,"C:/Users/lenovo/Documents/kr1.png",#PB_AlphaBlending)

CatchSprite(1, ?kr1, #PB_AlphaBlending)

DataSection
  kr1:
  IncludeBinary "C:\Users\lenovo\Documents\kr1.png"
EndDataSection
P.S.: Du scheinst auf Windows unterwegs zu sein. Da ist der " \ " das eigentliche "PfadTrennzeichen". Es sollte zwar auch mit "/" gehen... aber wer weiß ?
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Wie arbeiten mit CatchSprite() u. DataSection?

Beitrag von Re57 »

Danke, ich hatte den Code mit dem Smartphone abgetippt, weil ich zur Zeit kein Internet am Festnetzanschluß habe. Die fehlenden Klammern () sind vorhanden beim Decoder und das mit den Trennern hatte ich zwar auch schon gemerkt, allerdings sind bei den restlichen Pfaden (anderer Sprites) die Trenner andersherum, aber da funktioniert es auch nicht mit dem IncludeBinary(). Die Pfade zu meinen Sprites stimmen, sonst würden die Sprites ja auch nicht mit LoadSprite() geladen werden. Ich weiß nicht, was da los ist. Aber Du hast Recht, ich arbeite mit einem Windows-Laptop (Windows 10)

Edit: Die Trenner sind jetzt überall so, wie normal üblich bei Windows, aber es funktioniert trotzdem nicht mit IncludeBinary und DataSection. Wenn ich nach dem Verwenden von IB und DS ein Semikolon vor LoadSprite() setzte, kommt sofort eine "not inatialized" Fehlermeldung. Das wäre ja nicht der Fall, wenn IB und DS funktionieren würden. Die png.-Dateien sind genau im selben Ordner wie die .exe

Ich hatte nicht alles abgetippt, aber nach dem LoadSprite() steht noch ZoomSprite() in meinem Code. Vielleicht sollte das besser dann erst nach der DataSection() stehen. Entschuldigung, ist mir eben erst eingefallen. Bin gerade außer Haus. Melde mich später wieder.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Wie arbeiten mit CatchSprite() u. DataSection?

Beitrag von Bisonte »

Ich meinte mit "kein Pfad" den Teil in deinem IncludeBinary Aufruf...

Dort stand nur

Code: Alles auswählen

IncludeBinary "kr1.png"
ich fügte den Pfad hinzu :

Code: Alles auswählen

IncludeBinary "C:\Users\lenovo\Documents\kr1.png"
dann sollte PB die Datei auf jedenfall finden und laden, wenn es deine

Code: Alles auswählen

LoadSprite(1,"C:/Users/lenovo/Documents/kr1.png",#PB_AlphaBlending)
Anweisung schafft...
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Wie arbeiten mit CatchSprite() u. DataSection?

Beitrag von Re57 »

Das spielt keine Rolle in dem Fall, ob ich den Pfad da voll ausschreibe oder nicht. Mittlerweile funktioniert es jetzt sogar, nachdem ich peinlich genau auf Groß- und Kleinschreibung geachtet hatte und die ZoomSprite- und TransparentSprite-Befehle im Code verlegt habe. Eine png.-Datei scheint aber nicht ganz in Ordnung zu sein, weil die nach dem Laden in die DataSection dann nicht mehr lm Programm angezeigt wird, also werde ich die Datei durch eine andere ersetzen. Geht aber aus zeitlichen Gründen wohl erst morgen. Danke nochmals.

Edit: Mit einem Ersatz-Sprite funktioniert jetzt alles bestens.
Antworten