TBank Fehler wirkt sich auf LoadImage aus...

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Firstdeathmaker

Betreff: TBank Fehler wirkt sich auf LoadImage aus...

BeitragDo, Jun 05, 2008 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich habe einen sehr skurillen Fehler:

Ich habe in meinem Programm einen Screen der alle verfügbaren Level anzeigt . Das Laden der Leveldateien funktioniert durch:

Code: [AUSKLAPPEN]

Function ParseRiddleData(path:String)
   Local stream:TStream = LoadRiddleFile(path)
   '... hier jede Menge Parse funktionen
   If stream <> Null CloseStream stream
end function

Function LoadRiddleFile:TStream(path:String)
   Local inStream:TStream = ReadFile(path)
   If inStream = Null Return Null
   
   'test
   Local variante:Byte = 2
   
   If variante = 1
      Local outStream:TStream = WriteFile("tmp")
      TXor.crypt(inStream, outStream)
      CloseFile inStream
      CloseFile outStream
      Return (ReadFile("tmp"))
   ElseIf variante = 2
      Local bank:TBank = new TBank
      Local bankStream:TBankStream = CreateBankStream(bank)
      TXor.crypt(inStream, bankStream)
      SeekStream bankStream, 0
      bank = Null
      Return bankStream
   EndIf
End Function


Also die Leveldateien werden nicht direkt geladen (weil Xor verschlüsselt), sondern erst durch einen entschlüsselungsalgorithmus gejagd welcher den Inputstream in einen Bankstream schreibt welchen ich dann weitergebe. (Also bei Variante = 2)

Das ganze funktioniert soweit auch soweit fehlerfrei und korrekt. Wenn ich dann aber das Menü zum zweiten Mal lade, werden auf einmal alle Images nicht mehr geladen welche in diesem Menü auftauchen, obwohl die Pfade genau die gleichen wie beim ersten Mal sind. Ich habe den sehr dringenden Verdacht, dass der code in Variante=2 die Ursache dafür ist, dass LoadImage sabotiert wird. Denn wenn ich das ganze auf Variante=1 umstelle, tritt der Fehler nicht auf.

Hat irgendjmd ne Idee woran es hier liegen könnte, dass der Fehler nicht bei Variante 1 sondern nur bei Variante 2 auftritt?

Ich hoffe jmd kann mir helfen...
fdm
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragDo, Jun 05, 2008 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du mal versucht die bank in der korrekten grösse zu erzeugen bzw. überprüft wie gross der bank stream überhaupt ist via debug und anschauen?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Jun 05, 2008 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du so?

Code: [AUSKLAPPEN]
Function LoadRiddleFile:TStream(path:String)
   Local inStream:TStream = ReadFile(path)
   If inStream = Null Return Null
   
   'test
   Local variante:Byte = 2
   
   If variante = 1
      Local outStream:TStream = WriteFile("tmp")
      TXor.crypt(inStream, outStream)
      CloseFile inStream
      CloseFile outStream
      Return (ReadFile("tmp"))
   ElseIf variante = 2
      Local bank:TBank = CreateBank(StreamSize(inStream)) 'New TBank
      Local bankStream:TBankStream = CreateBankStream(bank)
      TXor.crypt(inStream, bankStream)
      SeekStream bankStream, 0
      bank = Null
      Return bankStream
   EndIf
End Function



Da funktioniert es nämlich auch nicht (so hatte ich es sogar ursprünglich).
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragDo, Jun 05, 2008 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
der inhalt des bankstreams ist korrekt? (kannst beide varianten parallel laufen lassen und im Debug modus den inhalt der beiden streams vergleichen oder es direkt byte für byte im code vergleichen)

wenn ja, dann wird bankstream von der pixmap laderoutine einfach net unterstützt.
wenn nein, dann wird irgend etwas anders gemacht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Jun 05, 2008 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich hab es etwas ungenau beschrieben:

Genau dieser Codeteil da oben funktioniert perfekt, also beide Varianten. Nur wenn ich Variante 2 nutze, gibt es (etwas später im Programm) einen Fehler in einem LoadImage Aufruf. Also dieser Code da oben wird mir nie im Debugger als Fehlerhaft angezeigt wenn ich die tests mache, aber ich habe durch ein sehr mühsames Ausschlussverfahren festgestellt, dass es genau diese Stelle sein muss.

Der Fehler ist einfach der, dass ich nach zweimaliger Ausführung obengenannten Codes kein einziges Bild über LoadImage() mehr laden kann, obwohl der Pfad wirklich 100% korrekt ist (und nach dem 1ten Aufruf des obenstehenden Codes funktioniert hat).

Ich bekomme also beim Debuggen einen Ladefehler LoadImage(eineMenüGrafik) = null wenn ich vorher zweimal den obenstehenden Code mit der Variante 2 aufgerufen habe.

Den Aufruf von LoadImage hab ich bis loadpixmap zurückverfolgt, und von da bekommt er einfach (obwohl es der richtige Pfad ist) kein Image zurückgeliefert, sondern nur "null".

Ablauf meines Programmes:

- Laden der Leveldaten (xor) mit obenstehender Funktion
- Laden der Menügrafiken (vom laden der Leveldaten unabhängige fixe Pfade, hab ich schon mehrmals überprüft)
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragDo, Jun 05, 2008 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ... ich glaub ich hät da ne idee ... schliess ma inStream auch in variante 2. In variante 1 schliesst du ihn ja ordnungsgemäss wieder, in variante 2 net.

mein vorschlag alternativ (und besser) wär das close instream da ganz rauszunehmen und es dort aufzurufen wo du den stream auch öffnest, damit du konsistenz hast in der kontrolle über den stream
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Jun 05, 2008 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
JUHU!!! Es funktioniert! Dass ein simples closestream so viel bewirken kann...

Vielen vielen Dank für deine Hilfe!
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group