Quadrate statt Sprites

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Quadrate statt Sprites

    Hallo zusammen,

    ich arbeite an einem Adventuregame. Dieses habe ich mit GM6 bereits sehr weit entwickelt. Nun möchte ich auf GM Studio wechseln und habe untern anderem folgendes Problem:

    Wenn ich einen Raum mit der Hauptfigur betrete, dann erscheinen einige Sprites nicht. Statt dessen wird ein rotes Quradrat gezeigt. (Siehe Bild)

    Verlasse ich den Raum wieder und betrete ihn neu, erscheinen die Sprites dann teilweise doch. Einige bleiben ein rotes Quadrat.

    Woran kann das liegen?
  • Ich habe ein altes Projekt importiert und natürlich den Code entsprechend angepaßt. (War einige Wochen Arbeit.)
    Leider bringt es an dieser Stelle wenig, den Code abzubilden, da er relativ komplex ist und nur zusammenhängend nachvollzogen werden kann. Das wären dann mehrere Seiten. ich versuche es einmal anders.

    Ich habe ein globales Array definiert, das für jedes Objekt im Spiel (also nicht jedes Object im GMStudio, sondern nur jene Objekte, die in einem Inventar im Spiel aufgenommen werden können) das zugehörige Sprite festhält. Ungefähr so:

    array_object_sprite[id] = sprite_name

    Manche Sprites können dirket angesprochen werden, da ich sie als Sprite importiert habe. Andere werden während er Laufzeit aus dem Ordenr filedates eingeladen.

    array_object_sprite[id] = sprite_add(working_directory+fname, 2,1, 0, 0, 0);

    Im Prinzip funktioniert beides. Wenn ich jedoch einen Raum zum ersten Mal betrete, erscheinen einige (nicht alle!) sprites als rote Rechtecke. Betrete ich den Raum zum zweiten Mal erscheinen dann teilweise die richtigen Spritebilder.
    Das rote Rechteck ist übrigens ein Sprite, der tatsächlich existiert und die ID_Nummer 0 haben müßte, da er als erstes unter den Sprites zu finden ist.
    Offensichtlich wird zunächst, anstatt des gesetzten Sprites einfach die ID 0 verwendet. Es könnte ein zeitliches Problem sein. Das kontrolliere ich noch einmal ganz genau.

    Was mich aber nun irritiert: Wie kommt es, dass dieses Problem beim GM6 nicht auftaucht? Welche grundlegenden Unterschiede könnte es geben? Sind die zeitlichen Abläufe der Spriteübergabe anders? Muss man hier auf eine besondere Reihenfolge achten? Bisher habe ich dazu noch nichts konkretes finden können.

    Gruß Allakon
  • Versuch mal mit listen statt mit arrays zu arbeiten... ich kanns jetzt auch nicht genau sagen aber vll. gibt es komplikationen beim einladen der sprites... vll. kommt der gm nicht hinterher ladest es im create event ein? Ich weiß jetzt nicht recht aber ich würde es mal im draw begin event versuchen obs geht
    Wir stehen zusammen und wir fallen zusammen
  • Danke für die vielen Antworten.

    Ich habe das Problem gefunden! Eine ganz dumme Sache. Es ist etwas verschachtelt und wesentlich komplexer, als ich es hier schreibe, dennoch eine Kurzfassung: (vielleicht hat ein anderer ja ein ähnliches Problem)
    Eine Funktion, die Inventar-Objekte mit bestimmten Werten erzeugen sollte, wurde ein Sprite in Form einer Funktion übergeben.

    fct_create_inventar_object(variable_1, variable_2, ... , fct_get_sprite(x), ...);

    fct_get_sprite(x) sucht sich einen passenden Sprite zum Wert x aus und gibt ihn dann wieder zurück, damit fct_create_inventar_object() diesen Sprite dem zu erstellenden Objekt überträgt. An einer Stelle habe ich anstatt return sprite ein exit eingegeben. Folglich wurde der Wert 0 zurückgegeben und somit das Sprite mit der id 0 gezeichnet.
    Erstaunlicherweise wurde der GM6 auf diesen Fehler nicht aufmerksam.

    Der Thread kann geschlossen werden. :)