Variable/4 teilen aber als ganze Zahl ausgeben

  • GM 8

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

  • Variable/4 teilen aber als ganze Zahl ausgeben

    Hallo Liebe Community,

    der Titel ist ein bisschen komisch aber er spiegelt genau mein Problem.
    Ich habe ein Schieberegler für die Optionen gebastelt alles bis auf die Ausgabe der Werte funktioniert so wie es soll. Er gibt nämlich keine ganzen Zahlen aus, sondern fügt hinterher noch die (25,50,75) hinzu. Unten auch das Projekt als Anhang. Vielen dank für eure Unterstützung.



    Objekt: o_bar2

    Create Event

    GML-Quellcode

    1. vol = 0
    2. ini_open("Settings.ini")
    3. vol = ini_read_real("Volume","BGM",vol)
    4. ini_close()
    5. instance_create(x+vol*4,y,o_fill2)
    6. instance_create(x+vol*4,y,o_trigger2)
    7. o_fill2.image_xscale = o_bar2.x-o_fill2.x

    Left Button

    GML-Quellcode

    1. o_trigger2.x=mouse_x
    2. o_fill2.x = mouse_x
    3. o_fill2.image_xscale = o_bar2.x-o_fill2.x
    4. vol = o_trigger2.x/4-608/4 // Ich vermute diesen teil weil es durch 4 geteilt wird.
    5. //Aber wenn es anders ist werden die Werte falsch angezeigt (Soll von 0 - 100)

    Draw Event

    GML-Quellcode

    1. draw_self()
    2. draw_text(0,0,vol)


    Das Projekt:
    Scale.gm81

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

  • Es ist sicher ein Dezimaltrennzeichenproblem. Die variable "vol" wird für die Lautstärke verantwortlich sein. Ich will das der User diese von 0 - 100% regeln kann.
    Es wäre sicher komisch wenn man bemerkt das die Schrift die ausgegeben wird irgendwo bei 300 anfängt und bis 400 irgendwas geht..
  • Eher durch 10, aber das Problem wird leider auch so nicht gelöst denn dann gibt es die 10,20...usw kommer stellen.
    Nun ja ich grüble mal weiter, wenn mir eine Lösung gelingt dann poste ich sie, ansonsten hoffe ich noch auf Vorschläge X_X
  • Hab es verstanden. Deinen Code fand ich aber komisch und hatte noch ganz andere Macken, daher hab ich das mal fix neugeschrieben. Hab es auch halbwegs anständig kommentiert.

    Create Event:

    GML-Quellcode

    1. vol = 0; // actual volume (0 to 100)
    2. volX = 0; // volume translated to scaled x position (relative)
    3. clicked = false; // whether the bar was clicked
    4. // read initial volume
    5. ini_open("Settings.ini");
    6. vol = ini_read_real("Volume", "BGM", vol);
    7. ini_close();


    Step Event:

    GML-Quellcode

    1. if (!mouse_check_button(mb_left) && clicked) {
    2. // if mouse button is no longer pressed, stop following the cursor
    3. clicked = false;
    4. // write to file
    5. ini_open("Settings.ini");
    6. ini_write_real("Volume", "BGM", vol);
    7. ini_close();
    8. }
    9. else if (mouse_check_button_pressed(mb_left) || clicked) {
    10. // check if bar sprite was clicked
    11. if (position_meeting(mouse_x, mouse_y, self)) {
    12. clicked = true;
    13. }
    14. if (clicked) {
    15. // move to new position if in clicked state
    16. vol = (mouse_x - x) div (sprite_width / 100);
    17. // clamp position
    18. if (vol > 100) {
    19. vol = 100;
    20. }
    21. else if (vol < 0) {
    22. vol = 0;
    23. }
    24. // calculate volX
    25. volX = (sprite_width * vol div 100);
    26. }
    27. }
    Alles anzeigen


    Draw-Event:

    GML-Quellcode

    1. draw_self();
    2. draw_sprite_ext(s_fill2, 0, x, y + 4, volX, 1, 0, c_white, 1);
    3. draw_sprite(s_trigger2, 0, x + volX, y);
    4. // debug
    5. draw_text(0, 0, vol);
    6. draw_text(0, 20, mouse_x);


    Lösche alle Mouse-Events und die übrigen Objekte. Du solltest sogar im Create-Event ein anderes image_xscale einstellen können. Hab ich aber nicht getestet.
  • Ich sollte vielleicht noch ein paar kurze Erklärungen hinterherschieben:

    1. Release-Events sind Mist, weil sie nicht unbedingt eintreten (die Events werden nicht ausgelöst, wenn das Fenster nicht im Fokus ist). Deshalb die clicked-Variable.
    2. Leave-Event ist eine unschöne Lösung für den Steller, deshalb hab ich das Verhalten geändert.
    3. Du solltest Konstanten vermeiden (wie z.B. deine 4) und lieber alles an einer Stelle definieren. Im Moment ist die Breite des Sprites ausschlaggebend, aber das ist auch nicht immer die optimale Lösung.
    4. Ich hab deinen alten Code nicht mehr im Kopf, aber theoretisch wird die Zahl immer gespeichert, wenn die Maus den Balken verlässt. Das ist natürlich unschön, wenn der Spieler dann durch bloßes Cursorzappeln ständig Festplattenaktivität erzeugen kann. Vermeide daher, die "Hauptarbeit" in einem Code ohne Notwendigkeit auszuführen.