Portierung einer Bibliothek nach GML



  • Ist wirklich eine reine C++ Frage.

    GML = Game Maker Language

    Ich kann aus GameMaker nur floats oder Zeiger auf char arrays erhalten oder an GM senden.
    Das stellt mich vor das Problem, dass ich keine Zeiger direkt ans Script zurückgeben kann, wenn über eine Funktion ein Objekt erstellt wird.

    Die Frage ist, wie handhabe ich das am besten?

    1. Ansatz

    Adresse des Zeigers an GML zurückgeben und diesen Wert jedesmal wieder empfangen wenn das objekt manipuliert wird und einen Zeiger darauf umbiegen. Öhm hoffe ihr versteht was ich meine.

    2. Ansatz

    Alle erstellten Objekte in einer globalen Map speichern und den User dazu auffordern den Objekten Namen zu geben und mit strings arbeiten.

    Was ist eurer Meinung nach der bessere Ansatz oder bin ich hier komplett auf dem Holzweg?



  • 2 ist meiner Meinung nach sauberer, einfacher zu debuggen und zu serialisieren.

    D.h. ich würde 1 nehmen 🤡

    Ne, ist natürlich schwierig zu sagen, ohne alles zu kennen. Multithreaded-Zugriffe hast du wohl nicht, oder? Wenn du das ganze auf GameMaker-Seite schön wegkapseln kannst, geht auch Ansatz 1. Aber sobald dann Ressourcenverwaltung ins Spiel kommt und man z.B. alle Objekte beim Beenden löschen möchte, kann das wieder schwierig werden. Ich kenne halt GM nicht...



  • Hier mal ein Bild:
    http://imgur.com/M57cU

    GameMaker lädt quasi nur die Funktionen via LoadProc und ruft dann die Funktionen auf wie man sie angibt. Rückgabe und Übergabe erfolgt wie gesagt nur per float oder char array.
    ResourcenVerwaltung kommt nur für die eigene DLL ins Spiel und von GameMaker kann man nichts laden. Hier kann man aber init und cleanup Funktionen angeben.

    GameMaker hat keine direkten GUI Funktionen und ich möchte eine "richtige" Bibliothek benutzen um dieses Manko auszugleichen. Dazu muss ich aber halt extensions verwenden.

    Multithreading ist afaik kein Problem. Problematisch wirds nur mit events aus der GUI Bibliothek, aber da hab ich schon Ideen das zu umgehen.

    Gibts noch eine andere Möglichkeit ausser 2?


Anmelden zum Antworten