Seite 1 von 1

Wie arbeiten mit CatchSprite() u. DataSection?

Verfasst: 21.06.2020 11:12
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.

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

Verfasst: 21.06.2020 11:21
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ß ?

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

Verfasst: 21.06.2020 11:37
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.

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

Verfasst: 21.06.2020 16:14
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...

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

Verfasst: 21.06.2020 16:37
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.