Immer freesprite() vor loadsprite() ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Immer freesprite() vor loadsprite() ?

Beitrag von Sebastian »

Hallo!

Wenn ich eine Grafik genau indiziert lade, also z.B. loadsprite(1,"C:\grafik.bmp") und nun etwas damit anstelle und daraufhin den Befehl wiederhole, also nochmals loadsprite(1,"C:\grafik2.bmp), geht dann doppelter Speicher verloren oder wird die erste Grafik im Speicher einfach überschrieben?

Vielen Dank für Eure Hilfe
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Probiers doch einfach aus.

Tipp:
Wenn du
a$="Hello world!"
a$="Hello!"

schreibst ist anschließend a$="Hello!" .
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sobald ein PBIdentifier, also in diesem Falle die 1, erneut benutzt wird, wird
der alte entfernt und freigegeben. Free...(PBID) sind also nicht erforderlich,
erhöhen aber die Lesbarkeit

PS: Mit strings hat das ganze aber nicht viel zu tun :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Danke für Deine Antwort. Das ist mir natürlich klar. Ich weiß auch, dass ich auf die erst Grafik keinen Zugriff mehr habe, aber ich verstehe nicht, was PB intern mit den Speicherstellen macht. Bleibt die erste Grafik noch im Video-Ram oder wird der Speicher wie bei freesprite() freigegeben?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Klasse! Jetzt bin ich sehr beruhigt!
Vielen Dank!
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es ist aber allgemein davon abzuraten, einen solchen (un)stil zu pflegen...
wenn du sprite-nummern erneut vergeben willst, cleare vorher die vorherigen.

das szenario, bei dem das praktisch sein könnte,
wäre z.b. ein menu, für des du soviel grafix einlädst,
dass die graka an die obergrenze kommt.

bevor du dann den nächsten level lädst, wäre es natürlich praktisch,
alle bisherigen zu entladen, und danach die level-grafix neu einzuladen.

für so etwas mach dir eine LL, wo du die aktuellen sprites "mitschreibst" beim laden,
damit du auch wirklich die richtigen rauswerfen kannst beim nächsten laden.

wenn es nicht um so etwas geht, ist dein anfragen eher sinnfrei....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Nein. Darum geht es nicht. Es wird eine Grafik dargestellt, die von einem externen Programm verändert werden kann. Um die Veränderung zu zeigen, wird die Grafik ständig erneut geladen.
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

messages...

womit wird das bild verändert?

das verändernde proggi soll ne message schicken, wenn das bild gespeichert wurde.

das anzeige-programm lädt nur dann neu, wenn es diese message bekommt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

ich weiß aber nicht welches Programm die Grafik verändert. Es könnte sich um Gimp, Paint oder sonstwas handeln. Kann man den Speicherprozess irgendwie abfangen?
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm...
dann check doch per GetFileDate(), wenn es geändert wurde.
alle 5 sec. checken sollte ausreichen.

allerdings ist mir immer noch nicht ganz klar, wozu das gut sein soll.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten