Mesh in Type löschen
Übersicht

romanski1985Betreff: Mesh in Type löschen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hello!
Wie kann ich ein geladenes Mesh in einer meiner Types löschen? Oder von mir aus gleich das ganze Type? Gibt bestimmt schon Threads aber ich finde keins in dem jemand das Mesh so anlegt wie ich: Type PthBox 'Mesh für Pathfinding Field msh:Tmesh Field x:Int Field y:Int Field z:Int Field wall:Int Function Neu:PthBox() ' Neues 3D-Objekt hinzufügen Return New PthBox End Function End Type und dann später im Code zum Beispiel: Pthboxs[x]=Pthbox.Neu() Pthboxs[x].msh = CreateCube() Ist ein Teil von meiner Pathengine. Funktioniert auch alles so weit. Nur löschen kann ich sie nicht. kann mir vielleicht jemand weiterhelfen? |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Pthboxs[x].msh = Null den Rest erledigt der Garbage Collector nehme ich an.
Ich nehme es nur an, da ich keinerlei Erfahrung mit miniB3D oder ähnlichen 3D Modulen habe. Aber im Normalfall braucht man nur alle Verknüpfungen der Instanz zu nullen die gelöscht werden soll. Deine Funktion Neu irritiert mich allerdings ein wenig. ![]() Pthboxs[x] = New Pthbox machst.
|
||
![]() |
tedy |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja bei §d gibts ja nicht sowas wie Drawentity also denk ich mal es gibt ein Befehl Freeentity den musst du dann nutzen um erstmal das Mesh aus dem Speicher zu löschen da sonst dein Speicher irgendwann zu voll wird
einfach freeentity(msh) und dann löschst du aus deiner Liste (du hast da diesen array ) den Eintrag |
||
01010100 01100101 01000100 01111001 00100000 00111010 01000100 |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benutze FreeEntity(Pthboxs[x].msh).
Am besten baust du in deinen Type eine Delete Method und machst dort sowas rein: Code: [AUSKLAPPEN] Method Delete() FreeEntity(msh) End Method Damit kannst du dann das machen was d-bug vorgeschlagen hat: Pthboxs[x] = Null Sobald der GC dann Pthboxs[x] löscht wird die Delete Methode aufgerufen und die Referenzen auf das mesh innerhalb der Engine werden gelöscht. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
romanski1985 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
erstmal vielen dank für eure schnellen antworten!
da passiert leider garnichts wenn ich das reinschreibe. Weder wenn ich nur versuche mit freeentity das mesh zu löschen oder wenn ich die methode reinschreibe und dann den type auf null setze. was mache ich falsch? minib3d version 1.41 |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hat sich da irgend etwas geändert? Meines Wissens war die Delete-Method doch nur als Platzhalter für zukünftige Erweiterungen von BMax vor reserviert. Kann aber durchaus sein, dass sich das in den letzten paar Updates irgendwo geändert hat. Ich gebe zu, dass auch ich zu faul bin alle Update-Historien zu lesen - von Readme's ganz zu schweigen *hust*. | ||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja d-bug, da hat sich was geändert, zumindest seit dem es den GC gibt und (ich weiß es nicht mehr) vielleicht auch davor schon.
Die Methode Delete ist wie die New Methode in jedem Objekt vorhanden und wird ausgeführt sobald keine Referenz mehr auf das Objekt existiert und der GC das Objekt freigibt. @romanski1985: Wenn du sehen willst ob es auch gelöscht wird kannst du die Delete Methode so erweitern: Code: [AUSKLAPPEN] Method Delete() Debuglog "Entitycount (before): " + TEntity.Entity_List.Count() Debuglog "freeing mesh!" FreeEntity msh Debuglog "Entitycount (after): " + TEntity.Entity_List.Count() End Method Im Debugmodus erhältst du dann etwas genauere angaben. Allerdings Achtung: bei verwendung der Delete Methode kann es passieren das nicht sofort das Objekt freigegeben wird. Der GC gibt Objekte nur frei wenn es sich lohnt, zb wenn eine gewisse Zeit verstrichen oder genug Objekte gelöscht wurden. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
romanski1985 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und wie sieht das aus mit ner liste die ich mit den types verknüpfe? vielleicht würde es damit funkionieren?
meine bmax version ist 1.12 ich hab gerade ausprobiert: normale meshes die nicht in types angelegt wurden kann ich mit freeentity() löschen. aber alles was sich in types befindet leider nicht. müsste ich dazu vielleicht den code direkt in der minib3d ändern? woran könnte das liegen? |
||
romanski1985 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@klepto.
danke. gerade ausprobiert. das kommt raus: DebugLog:Entitycount (before): 127 DebugLog:freeing mesh! DebugLog:Entitycount (after): 126 allerdings unabhängig davon wie viele ich lösche(garkeine bis viele). ich lasse meine types(die ich gerade in "sppoints" umbenannt habe) so löschen: sppoints[1] = Null sppoints[2] = Null |
||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du müsstest diese 3 Zeilen für jedes Objekt erhalten also bei 2 Objekten :
DebugLog:Entitycount (before): 127 DebugLog:freeing mesh! DebugLog:Entitycount (after): 126 DebugLog:Entitycount (before): 126 DebugLog:freeing mesh! DebugLog:Entitycount (after): 125 btw: Update mal dein BMax. Aktuelle version ist 1.30 und nicht 1.12 . Dann solltest du das ganze nochmal testen, BMax ist in den Versionen um einiges effizienter geworden. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
romanski1985 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe gerade geupdated. jetzt funktioniert aber mal wieder was anderes im code nicht weshalb ich es gerade nicht testen kann.
jetzt kommt Blitzmax und spuckt folgenden Fehler aus: Unable to convert from 'TEntity' to 'int' bei der zweiten Zeile von: Global objektindex:Int = 0 objektindex = COLLISIONENTITY(camera,cc) vorher hats aber funktioniert. warum muss das immer alles so kompliziert sein? ![]() |
||
romanski1985Betreff: p.s.: |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ahhh.
Problem gelöst. Ich hatte ausversehen andauernd Waypoints generiert. Bin draufgekommen nachdem ich mich über die Hohe Anzahl von Entities im Debuglog gewundert habe. Auf einmal läufts auch irgendwie viel schneller ![]() VIELEN DANK! bis später- |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group