string_width() ändert sich fälschlicherweise

  • GM 8

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

  • string_width() ändert sich fälschlicherweise

    In einem aktuellen Projekt habe ich eine ganze Menge von Objekten, die unterschiedliche Mouseover-Texte anzeigen (per Mouse Enter und Mouse Leave gesteuert). Der Text ist mit einem farbigen roundrect() hinterlegt, das per string_width() an die jeweilige Textlänge angepasst wird.
    Soweit funktioniert alles fehlerfrei.
    Nun wird allerdings dieses roundrect offenbar von einem anderen Objekt, das ebenfalls einen String per draw_text anzeigt, ungewollt beeinflusst.

    Objekt für die Mouseover (obj_draw):

    GML-Quellcode

    1. //Draw Event:
    2. //execute code:
    3. if draw = 1
    4. {draw_set_color(10934758)
    5. draw_roundrect(mouse_x+16,mouse_y+4,mouse_x+string_width(a)+4,mouse_y+24,0)
    6. draw_set_font(mouseover)
    7. draw_set_halign(fa_left)
    8. draw_set_color(0)
    9. draw_text(mouse_x+20,mouse_y+5,a)}


    Beispielobjekt, über dem der Mouseover-Text angezeigt wird und das das „störende“ Objekt erstellt:

    GML-Quellcode

    1. //Alarm Event for alarm 0:
    2. //execute code:
    3. if aktiv == 1
    4. {global.h += lv*2
    5. global.n -= ceil(lv/2)
    6. i = instance_create(x+24,y,show_rp)
    7. i.rp = (lv*2)
    8. alarm[0] = 300}
    9. //Mouse Event for Mouse Enter:
    10. //execute code:
    11. obj_draw.draw = 1
    12. obj_draw.a = "Beispielobjekt Lv. "+string(lv)
    13. //Mouse Event for Mouse Leave:
    14. //execute code:
    15. obj_draw.draw = 0
    Alles anzeigen


    der Störenfried (show_rp - dient dazu, einen sich bewegenden Text zu zeichnen):

    GML-Quellcode

    1. //Create Event:
    2. set Alarm 0 to 60
    3. start moving in directions 000000010 with speed set to 3
    4. //Alarm Event for alarm 0:
    5. destroy the instance
    6. //Step Event:
    7. set the vertical speed relative to 0.05
    8. //Draw Event:
    9. //execute code:
    10. draw_set_font(mouseover)
    11. draw_set_color(65535)
    12. draw_text(x,y,"+"+string(rp))
    Alles anzeigen


    Wie man sieht wird das letzte Objekt nach kurzer Zeit zerstört. Während es existiert ist allerdings der Wert von string_width() um 20 verringert und nimmt den korrekten Wert erst wieder an, wenn show_rp nicht mehr existiert.
    Ich habe mir die beteiligten Aktionen und Scripte jetzt x-mal angesehen, aber den Fehler nicht gefunden.
    (befürchte aber, dass es irgendwas simples ist, was ich übersehe...)
  • Da die string_width() und string_height() Funktionen die aktuelle Schriftart miteinberechnen, dürfte es reichen, deine draw_set_font() Befehle vor dem Zeichnen des Rechtecks auszuführen. Das Problem dürfte nämlich daran liegen, dass in einem anderen Objekt scheinbar eine andere Schriftart verwendet wird, und dann eben von dieser ausgegangen wird, da die Schriftart erst vorm Zeichnen des Texts geändert wird.

    © 2008 by Teamgrill Productions
  • Ich sags ja, irgendwas idiotisches...
    Tatsächlich ließ sich das Problem dadurch beheben, ich musste nur noch die addierten Pixel anpassen.
    Tja, so schnell kanns gehen, ist gelöst und kann geclosed werden.

    Achso, danke natürlich an MasterXY !
  • Benutzer online 1

    1 Besucher