Probleme mit Banks [gelößt]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

zimtstern#3

Betreff: Probleme mit Banks [gelößt]

BeitragDi, Jul 20, 2004 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
zur zeit experimentiere ich mit banks, ist es normal das die nicht standartmäßig 'leer' sind bzw. etwas enthalten? Bei dem unten angeführten code habe ich nämlich ab und zu werte in der Tabelle stehen obwohl diese leer sein müsste! ...oder Question

Code: [AUSKLAPPEN]
Global map_breite,map_hoehe,tile_breite,tile_hoehe,map_bank

Graphics 800,600,0,0
SetBuffer BackBuffer()

tile_breite = 32
tile_hoehe   = 24
map_breite = 10
map_hoehe  = 10

CreateMap(map_breite,map_hoehe,1)

If map_breite <> 0
   
   For i = 0 To map_breite-1
      For ii = 0 To map_hoehe-1
         Rect i*tile_breite,ii*tile_hoehe,tile_breite,tile_hoehe,0
      Next
   Next
   
   
   For i = 0 To map_breite-1
      For ii = 0 To map_hoehe-1
         Text i*tile_breite,ii*tile_hoehe,Str$(ReadMap_TileData(i,ii,0))
      Next
   Next
End If

Flip

Delay 3000

Function ReadMap_TileData(x,y,z)
tiledata = PeekByte (map_bank,(((x+(y-1)*map_breite)-1)*2)+z)
Return tiledata
End Function

Function CreateMap(map_breite,map_hoehe,layer_anz)
map_bank = CreateBank (map_breite*map_hoehe*2*layer_anz)
End Function
  • Zuletzt bearbeitet von zimtstern#3 am Mi, Jul 21, 2004 13:28, insgesamt 2-mal bearbeitet
 

Edlothiol

BeitragDi, Jul 20, 2004 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Der belegte Speicherbereich wird eben nicht automatisch gelöscht, deshalb ist es gut möglich dass da manchmal noch was steht.
 

zimtstern#3

BeitragDi, Jul 20, 2004 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das müsste dann ja so funktionieren, bei mir lassen sich die ersten 11 einträge aber nicht verändern. Was mache ich falsch?

Code: [AUSKLAPPEN]
Global map_breite,map_hoehe,tile_breite,tile_hoehe,map_bank

Graphics 800,600,0,0
SetBuffer BackBuffer()

tile_breite = 32
tile_hoehe   = 24
map_breite = 10
map_hoehe  = 10

CreateMap(map_breite,map_hoehe,1)
clearmap(map_bank)

If map_breite <> 0
   
   For i = 0 To map_breite-1
      For ii = 0 To map_hoehe-1
         Rect i*tile_breite,ii*tile_hoehe,tile_breite,tile_hoehe,0
      Next
   Next
   
   
   For i = 0 To map_breite-1
      For ii = 0 To map_hoehe-1
         Text i*tile_breite,ii*tile_hoehe,Str$(ReadMap_TileData(i,ii,0))
      Next
   Next
End If

Flip

Delay 3000

Function ReadMap_TileData(x,y,z)
tiledata = PeekByte (map_bank,(((x+(y-1)*map_breite)-1)*2)+z)
Return tiledata
End Function

Function CreateMap(map_breite,map_hoehe,layer_anz)
map_bank = CreateBank (map_breite*map_hoehe*2*layer_anz)
End Function

Function ClearMap(map_bank)
size = BankSize (map_bank)
For i = 0 To size-1
   PokeByte map_bank,i,33
   X = PeekByte (map_bank,i)
Next
End Function

TheShadow

Moderator

BeitragDi, Jul 20, 2004 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist unmöglich - die neu erstellten banks sind bei mir immer leer gewesen... Das ist typisch für Basic
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

zimtstern#3

BeitragMi, Jul 21, 2004 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab den Fehler gefunden:

Code: [AUSKLAPPEN]
   For i = 0 To map_breite-1
      For ii = 0 To map_hoehe-1
         Text i*tile_breite,ii*tile_hoehe,Str$(ReadMap_TileData(i,ii,0))
      Next
   Next


Der Fehler besteht darin das ich bei null anfange aber meine formeln in der funktion ReadMap_Tiledata() erst ab 1 funktionieren.
Wenn man mal den aufruf der Funktion mit 0 durchrechnet ergibt sich:
Code: [AUSKLAPPEN]

tiledata = PeekByte (map_bank,(((x+(y-1)*map_breite)-1)*2)+z)

für x,y,z = 0 map_breite = 3

 =>    (((x+(y-1)*map_breite)-1)*2)+z
 =>    (((0+(0-1)*3)-1)*2)+0
 =>    (((0+(-1)*3)-1)*2)+0
 =>    ((-1*3)-1)*2)+0
 =>    ((-3)-1)*2)+0
 =>    ((-4)*2)+0
 =>    -8+0
 =>    -8

=> tiledata = PeekByte (map_bank,-8)



Erstaunlich das es keine Fehlermeldung gibt

TheShadow

Moderator

BeitragMi, Jul 21, 2004 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du BB+ - dort sind ungültige größen möglich (funzt dann wie ein pointer)
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group