Sprite in Variabel macht fehler

  • GM 8

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

  • Sprite in Variabel macht fehler

    Hey

    Ich habe gerade ein sehr komischen Problem und steh da wirklich ziemlich auf dem Schlauch. (Benutze im übrigen GameMaker:Studio aber ich denke das dürfte in dem Fall keinen unterschied machen).
    Aktuell Programmiere ich ein Achievement System. In einer Ini Datei stehen Name, Beschreibung und der Sprite zur jeweiligen Auszeichnung. Diese Werden dann ausgelesen und an das Objekt oAchv übergeben. Soweit so gut. Nun habe ich also Folgende Variabel:

    GML-Quellcode

    1. name = "";
    2. desc = "";
    3. myId = 0;


    Im Draw Event steht nun Folgendes:

    GML-Quellcode

    1. draw_sprite("sAchvPic"+myId, 0, x-171, y-27);
    2. draw_sprite(sAchvBox, 0, x, y);
    3. draw_text(x, y, string(name));


    Nun tritt folgendes Problem auf: Es klappt alles wunderbar. sAchvBox wird gezeigt, der Text wird gezeigt, nur statt sAchvPic1 (1 der Wert von myId der auch richtig übergeben wird), wird ein ganz anderer Sprite mit dem Namen s_arrow2 angezeigt. Kein "Sprite nicht gefunden" oder sonstiges. Einfach ein ganz anderes Bild. Ich verstehe es gerade wirklich nicht. Mach ich ein ganz dummen Fehler (um diese Uhrzeit :P) oder klappt das so, wie ich es mache gar nicht?

    Anmerkung: Auch "sAchvPic"+string(myId) führt zum gleichen Ergebnis.

    Ich bin keine Signatur... Ich putze hier nur!
  • Keine Ahnung obs daran liegt, aber du lässt ein "String" drawn?
    Der erkennt hier somit kein Sprite sondern nur ein Wert welcher hier aber (ich denk mal dank Game Maker universal-Format) als eine 1 oder so ausgelesen wird.
    So.
    Jetzt hat jeder Sprite in deinem Projekt auch eine ID, jenachdem wann sie ins Projekt eingefügt worden sind.
    Zum Beispiel das erste Sprite dass du reinschiebst hat die ID 0 (oder 1?)

    Jetzt könntest du auch z.B schreiben draw_sprite(2, 0, x, y); und es würde das Sprite mit der ID 2 gedrawt werden, egal welchen Namen das Sprite eigentlich hat.

    (Wenn du z.b. string(sprite_irgendeinSprite) schreibst steht da am Ende auch nicht "sprite_irgendeinSprite" sondern z.b. "9")

    Mit anderen Worten: (Soweit ich weiß. Wenns adners geht würd ichs auch gerne wissen :D)
    Du kannst keinen String benutzen um einen bestimmtes Sprite anzusprechen.
    draw_sprite("sAchvPic"+myId, 0, x-171, y-27); geht somit einfach nicht. denn "sAchvPix"+myId ist halt ein String, kein Sprite

    EIne Möglichkeit wäre jetzt (was ich aktuell auch so mache und verdammt froh wäre wenns eben doch mit so Strings oder so gehen würde)
    du bastelst dir ein Skript welches jenachdem welcher String als Argument übergeben wird ein bestimmtes Spritee zurückgibt.

    Könnte so aussehen:

    draw_sprite(get_spritename("sAchvPic"+myId), 0, x-171, y-27);

    get_spritename:

    GML-Quellcode

    1. switch(argument0)
    2. {
    3. case "sAchvPic0":
    4. return sAchvPic0;
    5. break;
    6. case "sAchvPic1":
    7. return sAchvPic1;
    8. break;
    9. case "sAchvPic2":
    10. return sAchvPic2;
    11. break;
    12. .
    13. .
    14. .
    15. }
    Alles anzeigen


    Musst halt nur drauf achten dass es ein Sprite ist. (Erkennst du an der Farbe des Codes :D)

    lg. pac



    Edit: Ich seh grad myID ist bei dir eine Real, kein String.
    Also nimmt er vermutlich immer die myID als ID eines Sprites, welches halt nicht zwingend das Sprite ist welches du brauchst. Und "sAchvPic" wird scheinbar einfach ausgefiltert.


    Edit2: Alles ausm Kopf geschrieben. Angaben ohne Gewehr. Kann auch sein dass ich mich Irre
    Sorm ist Schuld

    Edit: Doch ist er

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pacmangamer ()

  • Hmm schade! Dabei war ich mir so sicher, dass ich es schon mal gemacht habe.
    Naja dann werde ich wohl die etwas umständliche Variante die du vorgeschlagen hast benutzen! Vielen Dank für deine ausführliche Hilfe :)

    Ich bin keine Signatur... Ich putze hier nur!