Frage zu draw_sprite

  • GM 7
  • Frage zu draw_sprite

    Hallo Leute,

    Ich hab wieder mal ein Problem.
    Ich hab im Step-Event eines Objektes diesen Code stehen:

    GML-Quellcode

    1. img=global.inv1_img //das img ist spr_laser

    Und im Draw-Event das hier:

    GML-Quellcode

    1. draw_sprite(img,0,x,y) // Funzt nicht.
    2. draw_text(x,y,img) //wird richtig angezeigt. spr_laser, so wie es sein sollte.


    Also, wenn ich das Spiel jetzt starte, seh ich, dass der Name des Sprites gedrawt wird. Aber das Sprite selbst seh ich nicht. Es wird nur das erste Sprite (id=0) angezeigt.
    Woran könnte das liegen?

    lg
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Was passiert ist auch logisch.
    In der Variable img ist nur der name als string gespeichert.

    Die ganzen ressourcen namen wie z.B. spr_Laser sind im GM immer nur variablen.
    Wenn du draw_text(x,y,spr_Laser) schreibst wirst du eine Zahl sehen, eben den Index des Sprites.
    Die Funktion draw_sprite benötigt diesen Index als Argument nicht den Namen der Ressource.
    Mit anderen Worten:
    img = spr_Laser
    draw_sprite(img,0,x,y)
    sollte funzen.

    Wenn du warum auch immer unbedingt den Ressourcennamen nur als String hast, müsstest du schreiben:

    draw_sprite(variable_global_get(inv1_img),0,x,y);
    oder zusammen mit deinem alten Code:
    draw_sprite(variable_local_get(img),0,x,y);

    Ist aber ziemlich sinnlos und viel langsamr als einfach die Ressourcen-variable zu verwenden.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    draw_sprite(variable_global_get(inv1_img),0,x,y);
    oder zusammen mit deinem alten Code:
    draw_sprite(variable_local_get(img),0,x,y);
    Man kann Werte von Variablen durch diese Methode nur bekommen, wenn man diese in " " hineinschreibt.
    Das heißt er müsste den Ressourcennamen in "" hineinschreiben.

    GML-Quellcode

    1. draw_sprite(variable_global_get("spritename"),0,x,y);


    Finde das aber auch eine komische Lösung. Warum schreibst du nicht einfach die ID der Ressource in die ini? also den Wert den du bekommst wenn du spritname ausgibst.

    © 2008 by Teamgrill Productions
  • Ok ich liste hier mal alle scripts auf die was mit global.inv1_img zu tun haben:

    GML-Quellcode

    1. //register
    2. external_ini_set("inv","inv1_img",spr_inv_laser1) //external_ini_set(section,key,value)
    3. //login
    4. global.inv1_img=external_ini_get("inv","inv1_img","0")
    5. //read
    6. img=global.inv1_img //kann variieren, je nachdem für welchen inventarplatz das objekt bestimmt ist.
    7. //draw
    8. draw_sprite(img,0,x,y)


    Und wie schon gesagt, wenn ich "img" drawe, erhalte ich den richtigen text.

    lg
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Äh, sicher dass da steht:

    external_ini_set("inv","inv1_img",spr_inv_laser1)
    und nicht
    external_ini_set("inv","inv1_img","spr_inv_laser1") ?

    Sonst kann das ganze irgendwie nicht sein.

    Außerdem, wie funktioniert dieses external_ini? braucht es kein Datei-Argument?

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Nein es ist ein Script, den Henrik mir gegeben hat.

    GML-Quellcode

    1. clearbuffer();
    2. writebyte(msg_ext_ini_set); <- das is die mid die am server wieder einen script auslöst
    3. writestring(argument0);
    4. writestring(argument1);
    5. writestring(argument2);
    6. sendmessage(global.server);


    GML-Quellcode

    1. //und zwar den hier.
    2. var sec,key,val;
    3. sec=readstring();
    4. key=readstring();
    5. val=readstring();
    6. ini_open(external_ini_var_ini);
    7. ini_write_string(sec,key,val);
    8. ini_close();


    Wenn ich "" hinmache, steht in der ini das hier: img=
    Genau. garnix steht dann da. wenn ich aber external_ini_set("inv","inv1_img",spr_inv_laser1) schreibe, funzt das, und es steht in der ini: img=spr_inv_laser1
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Ich frag mich warum die 39dll nicht schon beim writestring versagt. Die Sprites,Background und alles was einfach du erstellen kannst, tauchen dann farbig im Code Editor, d.h. sie können nur Variablen sein und diese Variablen sind Reals.

    GML-Quellcode

    1. //register
    2. external_ini_set("inv","inv1_img",string(spr_inv_laser1)) //external_ini_set(section,key,value)
    3. //login
    4. global.inv1_img=real(external_ini_get("inv","inv1_img",string(spr_inv_laser1)))
    5. //read
    6. img=global.inv1_img //kann variieren, je nachdem für welchen inventarplatz das objekt bestimmt ist.
    7. //draw
    8. draw_sprite(img,0,x,y)

    So sollte es funktionieren. Das kann mir auch nicht erklären, kann ja sein das der Game Maker i-wie umrechnet oder so.
    Wenn ich "" hinmache, steht in der ini das hier: img=
    Genau. garnix steht dann da. wenn ich aber external_ini_set("inv","inv1_img",spr_inv_laser1) schreibe, funzt das, und es steht in der ini: img=spr_inv_laser1
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Hä? Ist das jetzt'n Fehler des GM? Ich dachte wenn man irgendwo den namen einer Ressource hinschreibt dann nimmt der GM IMMER den Index und nicht den Namen als String wie hier O_o

    Also würde der Index geschickt werden und nicht der String.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Also ich kann diesen Fehler nicht reporduzieren (benutze aber auch nicht diese Skripte) und hab lange Zeit auch GM7 genutzt, sehr seltsam.

    Sicher dass die Variable nicht sonst irgendwo nicht verwendet wird? Global heißt dass sie überall beeinflusst werden kann.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Ich habe jetzt alles versucht, wirklich alles, und bin auf diese extrem umständliche Lösung gekommen:

    GML-Quellcode

    1. switch(argument0)
    2. {
    3. case "spr_inv_laser1":
    4. img=spr_inv_laser1
    5. break;
    6. case "spr_energy":
    7. img=spr_energy
    8. break;
    9. case "spr_leer":
    10. img=spr_leer
    11. break;
    12. case "":
    13. img=spr_leer
    14. break;
    15. }
    Alles anzeigen
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Benutzer online 1

    1 Besucher