Seltsamer Fehler mit UseBuffer()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
sakuL
Beiträge: 11
Registriert: 14.07.2005 20:08
Wohnort: Celle

Seltsamer Fehler mit UseBuffer()

Beitrag von sakuL »

Hallo!
Ich progge gerade ein Rollenspiel und habe es auf den Rechnern
von drei Freunden getestet. Auf zwei Computern trat ein Fehler auf,
den ich mir nicht erklären kann:
Der Fehler ist im Menü zur Heldenerstellung. Weil die Figuren
sehr klein sind, werden sie mit UseBuffer() auf ein Sprite gerendert,
das dann vergrößert dargestellt wird. Hier der Code:

Code: Alles auswählen

CreateSprite(9,32,32,#PB_Sprite_Texture)
UseBuffer(9)
ClipSprite(1498,savegameskincolour(20)*20,savegamegender(20)*84,20,20)
DisplaySprite(1498,0,5)
If type_hero_legarmour(0)>-1 And IsSprite(600+type_hero_legarmour(0)*3)
  ClipSprite(600+type_hero_legarmour(0)*3,0,savegamegender(20)*84,20,20)
  DisplayTransparentSprite(600+type_hero_legarmour(0)*3,0,5)
EndIf 
If type_hero_bodyarmour(0)>-1 And IsSprite(600+type_hero_bodyarmour(0)*3)
  ClipSprite(600+type_hero_bodyarmour(0)*3,0,savegamegender(20)*84,20,20)
  DisplayTransparentSprite(600+type_hero_bodyarmour(0)*3,0,5)
EndIf 
ClipSprite(1499,savegamehairsprite(20)*20+savegamegender(20)*(type_hero_hairsprites(0)*21+21),savegamehaircolour(20)*20,20,20)
DisplayTransparentSprite(1499,0,0)
UseBuffer(#PB_Default)
CreateSprite3D(9,9)
In diesem Code wird Sprite 600 (die Rüstung) nicht angezeigt.
Später in der Schleife wird die Spielfigur noch einmal mit genau
demselben Code in Originalgröße angezeigt, mit dem Unterschied,
dass die UseBuffer()-Befehle fehlen.
Auf meinem Rechner funktioniert alles, aber auf den anderen beiden,
die etwas älter sind, leider nicht :cry:
Woran liegt das und wie kann ich den Fehler beheben :?: :?: :?:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

- wird nur das ergebnis des vorgangs mit UseBuffer nicht angezeigt, oder auch der spätere?

- werden andere transparente sprites angezeigt?

- wie groß sind die älteren grafikkarten und wie viele grafik lädtst du?
kann es sein, dass sprite 600 recht spät geladen wird und nicht mehr in die graka passt?
könnte der rückgabewert der IsSprite-Func vielleicht 0 sein?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sakuL
Beiträge: 11
Registriert: 14.07.2005 20:08
Wohnort: Celle

Beitrag von sakuL »

@Kaeru
Nur zwischen den beiden UseBuffer-Befehlen wird Sprite 600 nicht
angezeigt. Es muss auf jeden Fall richtig geladen worden sein, weil es
in der Codeversion ohne UseBuffer richtig angezeigt wird.

Alle anderen transparenten Sprites werden angezeigt.

Es werden nur ca 5MB Grafiken geladen, das passt auf jeden Fall in
den Grafikspeicher. WOW läuft auf den Rechnern sehr flüssig...
Den Rückgabewert von IsSprite weiß ich nicht, beim zweiten Mal kann er
aber nicht 0 sein, es wird ja alles angezeigt. Also kann er beim ersten
Code eigentlich auch nicht 0 sein, da in der Zwischenzeit nirgendwo ein
Sprite gelöscht oder geladen wird.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

tja... dann komme ich da mit einer ferndiagnose nicht weiter.

meine erste idee wäre ein unerlaubtes texture-format gewesen,
aber in der ersten zeile steht ja 32x32...

kannst du länger an den rechnern arbeiten zum testen?

probier mal, den sprite 9 in 64x64 zu nehmen (vielleicht ist 32² der graka zu klein, ist aber unwahrscheinlich)

display mal ein anderes sprite komplett auf den 9er, also innerhalb des UseBuffer

benutz unmittelbar danach mal drawing befehle auf den 9er, ob die zu sehen sind


musst halt einfach mal alles mögliche ausprobieren, um den fehler zu finden.
möglicherweise liegt der auch garnicht hier, wo der 9er erzeugt wird, sondern dort, wo der 9er dargestellt wird....

ist halt wirklich so ein fall, wo man rumdaddeln muss bis man über die ursache stolpert.

ich hoffe mal, du kannst an den andern rechnern auch sitzen und kompilieren,
für ferndiagnose ist sowas immer super ärgerlich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sakuL
Beiträge: 11
Registriert: 14.07.2005 20:08
Wohnort: Celle

Beitrag von sakuL »

An die beiden Rechner komme ich in der nächsten Zeit nicht ran :(
Aber ich habe noch einen alten Rechner hier, auf dem habe ich das Spiel
noch garnicht getestet. Vielleicht kann ich da den Fehler reproduzieren.
Danke für die Hilfe :)
Antworten