Hallo zusammen,
ich stehe vor einem fundamentalen Problem in VB6, weil ich meine bisherigen Typen in Klassen umwandeln muss, damit sie über ein VBScript zugänglich werden. Folgendes:
Sagen wir ich will einen Manager für Texturen schreiben, im Grunde also eine Sammlung von Funktionen wie z.B. LoadTexture oder UnloadTexture, die intern die Texturen verwaltet. Wenn das Programm beendet wird soll sie natürlich alle geladenen Texturen wieder releasen. Soweit so gut.
Logischerweise muss der Manager nun alle Texturen irgendwo speichern, in einem Array oder in einer Collection, spielt hierfür keine Rolle. Und jetzt kommt die Entscheidung ob die Texturen entweder Typen oder Objekte sein sollen - macht eigentlich auch keinen Unterschied weil sie am Ende einfach nur ein paar Eigenschaften beinhalten (z.b. Breite und Höhe der Textur sowie ein Verweise auf das DirectX-Surface).
Okay, sagen wir es sind Typen (wie ichs jetzt habe). Der Manager speichert die Typen in einem Array und gibt mir jeweils den Index zurück und wenn ich eine Textur auf den Bildschirm zeichnen will rufe ich DrawTexture auf und gebe diesen Index weiter (damit die Funktion dann auf den Array zugreifen und das Surface rausholen kann). Klappt soweit bestens. Nun sagen wir aber ich will eine Textur löschen, dann kann ich die nicht aus dem Array löschen weil sonst die nachfolgenden Indizes nicht mehr stimmen würden - alles was ich tun kann ist die Textur als gelöscht zu markieren und beim nächsten LoadTexture diesen Platz im Array wiederverwerten. Mit Klassen, die ja intern referenziert werden, könnte ich den Array beliebig verändern.
Dann kommt noch das Problem, dass ich zusätzlich VBScript verwenden möchte und dort nur Objekte verwenden kann - also schon zwei Punkte um auf Klassen umzusteigen.
Gut, sagen wir also ich schreibe dan Manager mit Klassen. Soweit alles wie vorher, Texturobjekt wird geladen und intern in einen Array oder eine Collection gespeichert, nur diesmal kriege ich ein Objekt zurück (also eine Referenz). Will ich die Textur entfernen genau dasselbe wie vorher, nur dass diesmal der Array geändert werden kann (weil die Referenzen erhalten bleiben) aber hier kommt nun das Problem:
Sowohl der Array wie auch meine Variable verweisen auf dieses Objekt, der Manager kann aber nur seine Referenz (den Array) auflösen. Angenommen mehrere Sprites benutzen dieselbe Textur, so kann ich unmöglich alle Referenzen löschen - was dazu führt, dass das Texturobjekt einfach im Speicher bleibt.
Der einzige Weg den ich bisher sehe ist, zwar Klassen zu verwenden, aber sie nicht zu referenzieren sondern (wie bei den Typen) mit Indizes zu arbeiten - wodurch ich wiederum den Array nicht verändern darf. Irgendwie ein Zweickmühle, hm?
Hat da jemand Erfahrung mit und kann mir einen guten Ratschlag geben?
Verbindlichsten Dank,
Jemrijà