[GarbageCollector] beendet mein Programm unerwartet
Übersicht

SkulkBetreff: [GarbageCollector] beendet mein Programm unerwartet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich arbeite gerade an einer simplen tile-engine (wirklich SEHR simpel) und bin auf ein mir unerklärliches Phänomen gestolpert.
Wenn dass Array, dass die Tiles enthält eine bestimmte Dimensionierung erhält, beendet sich mein Programm nach ein paar sekunden mit der Meldung: GC setMemBit: membit Es handelt sich hier nicht um eine Gigantische Dimensionierung. Nein. nur um [20,35] wenn ich das array allerdings auf [20,20] setze funktioniert es einwandfrei. welchen grund kann es haben dass der Garbagecollector zuschlägt? Ich benutze keine Types, keine Lists, ich lösche nichts aus dem speicher, ich verändere nichts im speicher. ich erstelle nur ein array anhand dessen ich die tiles zeichne und prüfe wo sich meine maus befindet Übrigens, scrollen könnt ihr mit den pfeiltasten. wenn ich scrolle schnappt der GC schneller zu. ich verstehs net... bitte um hilfe, danke! ![]() Code: [AUSKLAPPEN] SuperStrict
Graphics 800, 600 Const FieldWidth:Int = 20 'Const FieldHeight:Int = 20 'Dieser Wert funktioniert Const FieldHeight:Int = 35 ' Hier Schlägt der GarbageCollector zu und beendet die Anwendung mit der Meldung: GC setMemBit: membit already set! Const TileHeight:Int = 32 Const TileWidth:Int = 32 Global OffsetX:Int = 0 Global OffsetY:Int = 0 Global myField:Int[FieldWidth,FieldHeight] Fuellen() While Not KeyHit(KEY_ESCAPE) Cls Movement() Zeichnen() Flip Wend End Function Fuellen() Local iX:Int = 0 Local iY:Int = 0 For iX = 0 To FieldWidth For iY = 0 To FieldHeight 'myField[iX,iY] = 1 myField[iX,iY] = Rand(0,10) Next Next End Function Function Movement() If KeyDown(KEY_LEFT) Then Scroll(-3,0) If KeyDown(KEY_RIGHT) Then Scroll(3,0) If KeyDown(KEY_UP) Then Scroll(0,-3) If KeyDown(KEY_DOWN) Then Scroll(0,3) End Function Function Scroll(X:Int, Y:Int) OffsetX:+X OffsetY:+Y End Function Function Zeichnen() Local iX:Int = 0 Local iY:Int = 0 For iX = 0 To FieldWidth For iY = 0 To FieldHeight If myField[iX,iY] > 1 Then DrawTile(iX, iY, IsMouseOver(iX,iY)) End If Next Next End Function Function DrawTile(X:Int, Y:Int, MouseOver:Byte) 'rahmen If MouseOver = True Then SetColor 255,128,128 Else SetColor 128,128,255 End If DrawRect X * TileWidth - OffsetX, Y * TileHeight - OffsetY, TileWidth, TileHeight ' vordergrund If MouseOver = True Then SetColor 128,64,64 Else SetColor 64,64,64 End If DrawRect X * TileWidth + 1 - OffsetX, Y * TileHeight + 1 - OffsetY, TileWidth - 2, TileHeight - 2 'reset SetColor 255,255,255 End Function Function IsMouseOver:Byte(gridX:Int, gridY:Int) If gridX = ConvertXtoGrid(MouseX()) And gridY = ConvertYtoGrid(MouseY()) Then Return True Else Return False End If End Function Function ConvertXtoGrid:Int(X:Int) Return Floor((X + OffsetX) / TileWidth) End Function Function ConvertYtoGrid:Int(Y:Int) Return Floor((Y + OffsetY) / TileHeight) End Function |
||
War doesn't determine who's right,
war determines who's left... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Komisch
Bei mir kommt das nicht Dafür kommt ein anderer Fehler und zwar loops du beim Array von 0 - Fieldwidth/ FieldHeight was falsch ist. Die gehen nur bis Fieldwidth-1 / FieldHeight-1 Das liegt daran, dass sich BM wie richtige Programmiersprachen verhält. Sprich wenn man einen Array mit 20 Elementen erzeugt sind 20 Elemente drin, nicht wie bei den alten Blitz 21. Es gibt die Elemente 0 bis Size-1 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh hubs,
ja das war nur ein denkfehler. klar, so sollte es ja sein... nachdem ich das korrigiert habe scheint der fehler auch nicht mehr aufzutreten....hm ich verfolg das noch etwas weiter, aber so wie es aussieht, war die falsche idexierung daran schuld... |
||
War doesn't determine who's right,
war determines who's left... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group