Spritenamen aus String auslesen und drawen

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

  • Spritenamen aus String auslesen und drawen

    Ich versuche ein Script zu schreiben aus dem ein Teil des Spritenamens als Argument weitergegeben wird, danach soll der Name zusammengesetzt werden und das Sprite gedrawed werden...

    Mein Code:

    im Begin Step-Event:

    GML-Quellcode

    1. script_execute(scr_begin_step,'1');


    im Script:

    GML-Quellcode

    1. var sprite;
    2. sprite = string('sprite_')+string(argument0);
    3. image_angle = self.direction;
    4. surface_set_target(sf);
    5. draw_sprite(sprite,-1,x,y,)
    6. surface_reset_target();


    Der Sprite heißt 'sprite_1'

    Ich bekomme die Fehlermeldung:

    ___________________________________________
    ERROR in
    action number 1
    of Begin Step Event
    for object 1:

    Trying to draw non-existing sprite.
    Gibt es einen Weg, das Problem zu lösen?
  • LoganTheManster schrieb:

    Ich kenn die Funktion und ich hätte schwören können, dass ich der Hilfe dabeistand, dass sie extrem langsam ist... Scheint aber nicht der Fall zu sein...

    Danke dir!

    Doch, das ist sie.
    Man darf sie also nicht zu oft ausführen. Einmal alle paar Sekunden (z.b. zum Waffen wechseln oder sowas) ist das schon ok. Aber wenn man das jeden Step macht, wird das Spiel merklich langsamer.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Ich hab schonmal was ähnliches wo anders vorgeschlagen:
    Wenn du diese Funktion öfters verwendest, lohnt es sich, alle spritenamen und deren index in eine globale ds_map zu speichern.
    diese map ist prinzipiell ein wörterbuch, sie hat einen key, einen schlüssel, zB den spritenamen "spr_haus" und einen dazugehörigen wert, zB 2.
    wie du sicher weist, hat jedes sprite eine id, einen index, der das sprite identifiziert.

    GML-Quellcode

    1. global.sprites = ds_map_create()

    das bedeutet, du kannst zu beginn des spiels alle sprites durchgehn und in diese map abspeichern:

    GML-Quellcode

    1. for (i=0; sprite_exists(i); i+=1)
    2. {
    3. ds_map_add(global.sprites, sprite_get_name(i), i);
    4. }

    und dein skript könnte so aussehen:

    GML-Quellcode

    1. sprite = ds_map_find_value( 'sprite_' + string(argument0) );
    2. draw_sprite(sprite, ...)
    "das war meine letzte flamewar PM an dich ."
  • @ blubberblub: Danke für deine Mühe, klingt logisch und funktionier auch bestimmt, jedoch ist es mir persönnlich dann doch zu viel Aufwand... um das zu umgehen, muss ich eben einfach 6 gleiche Objekte erstellen, und bei ihnen eine einzige Zahl ändern... Trotzdem danke!
  • Ja wenn du sagen würdest, was du bewerkstelligen willst, könnten wir dir vielleicht auch einen völlig anderen viel einfacheren Lösungsweg vorschlagen...
    ich persönlich finde, es ist nie und nie nie niemals nötig, mehrere gleiche objekte zu erstellen, nur um ein zwei variablen zu ändern.
    "das war meine letzte flamewar PM an dich ."