[NooNooPhysics] Memory Access Violation
Übersicht

funkmaster5000Betreff: [NooNooPhysics] Memory Access Violation |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Community,
im Moment experimentiere ich ein wenig mit Physik herum und dafür ist natürlich die Lib NooNooPhysics bestens geeignet. Ich habe den Platformer auch soweit fertig. Allerdings werden zur Laufzeit Objekte erstellt und irgendwann gibt mir Blitzbasic eine Memory Access Violation aus. Ich konnte den Fehler darauf eingrenzen, dass keine weiteren Objekte mehr erstellt werden können, da der Buffer für die Physikobjekte überläuft. Dabei rufe ich nach jeden gewonnenen Level NNP_DeleteEntity auf und lösche so die Objekte. Mir ist aufgefallen, dass trotz Aufruf die Variable EntityCount immer weiter ansteigt. Das führt schließlich zum Überlauf; bei der Initialisierung der Lib gibt man ja mit NNP_CreatePhysics(Entities,MaxEdges,MaxVertrices) die entsprechende Anzahl an. Eins oder mehrere der Felder werden irgendwann überschritten. Da dann keine neuen Entities mehr erstellt werden, generiert mir BB den Fehler, sobald ich bei dem neu erstellten Objekt die Flagge "isblock" setzen möchte. Da es nicht existiert, gibt es eine MAV. Hier ist der Code den ich verwende, ich habe den Type TEntity der Lib um das Feld "isblock" erweitert, damit der Spieler und die Bildschirmränder nicht gelöscht werden. Code: [AUSKLAPPEN] For b.TEntity = Each TEntity
If b\isblock = True Then NNP_DeleteEntity(b) End If Next Diese Funktion wird wie gesagt aufgerufen, wenn das Level beendet ist. Doch irgendwann erhalte ich dann von dieser Funktion den Fehler Code: [AUSKLAPPEN] If timepassed > 1000 Then
block.TEntity = NNP_CreateBox(Rand(192,448),0,32,32,0) block\isblock = True block\rotationenabled = False starttime = MilliSecs() End If Vielen Dank für eure Hilfe! |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuchs mal mit
BlitzBasic: [AUSKLAPPEN] For b.TEntity = Each TEntity Anscheinend hat da jemand vergessen, die EntityCount Variable zurückzuzählen, sobald ein Entity gelöscht wird. Ist diese Variable dann irgendwann größer als der Grenzwert, wird kein neues Entity erstellt, obwohl noch reichlich Platz vorhanden wäre ![]() ![]() Oder die elegantere Version: Du kannst es auch in der NooNooPhysics.bb in der Funktion Code: [AUSKLAPPEN] Function NNP_DeleteEntity( Entity.TEntity ) ergänzen. Für Edges und Vertexe ist der Zähler ok, aber für Entitys nicht.
MFG, |
||
Twitter
Download Jewel Snake! Windows|Android |
funkmaster5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich dachte es mir ![]() ![]() Ich ergänze es und werde das Programmverhalten beobachten. |
||
funkmaster5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmmm ![]() Leider hat die Ergänzung keinerlei Verbesserung gebracht. Ich kann die MAV Meldung natürlich abwenden, indem ich einfach prüfe, ob ein TEntity Objekt existiert bevor ich den Feldern die Werte zuweise: Code: [AUSKLAPPEN] If timepassed > 1000 Then
block.TEntity = NNP_CreateBox(Rand(208,432),0,32,32,0) If block <> Null Then block\isblock = True block\rotationenabled = False block\frame = Rand(0,3) End If starttime = MilliSecs() End If Das löst jedoch nicht das Grundproblem. Nach 2-5 Minuten Spielzeit werden keine neuen Blöcke mehr generiert. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eventuell habe ich mich vertan. Schau dir mal die globalen Variablen Code: [AUSKLAPPEN] VertexCount und Code: [AUSKLAPPEN] EdgeCount an. Diese haben meiner Meinung nach den selben Fehler, den EntityCount vorher auch hatte. Ich habe gestern Abend wohl Sand in den Augen gehabt. Hier habe ich mal 4 überarbeiteten Versionen der Funktionen:
Schau mal, ob es funktioniert, und lass dir VertexCount, EdgeCount und EntityCount anzeigen ![]() BlitzBasic: [AUSKLAPPEN] Function NNP_DeleteVertex( Vertex.TVertex ) |
||
Twitter
Download Jewel Snake! Windows|Android |
funkmaster5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey. Scheint zu funktionieren, werde mal die Playtester fragen ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group