Eine weitere Frage zum Thema Zahlen und Events

  • GM 8

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

  • Eine weitere Frage zum Thema Zahlen und Events

    Hallo zusammen,



    ich habe nochmal schnell eine Frage zum Thema Zahlen. Vielleicht kann mir hier jemand helfen, denn

    alleine komme ich nicht drauf, und finde auch nichts ähnliches in der Hilfe.



    Ich habe ein FELD1 und ein FELD2



    In FELD 1 läuft per Alarm eine Zahl hoch. Von 0 bis undendlich ( DIes habe ich hinbekommen und ist kein Prob )



    Nun mein Problem.



    In FELD 2 soll auch eine Zahl hochzählen. Und zwar immer dannn wenn Feld1 die nächsten 100 erreicht hat.



    Also bei 100 soll die Zahl in Feld1 = 1 sein, bei 200 = 2 bei 300 =3 usw. Das selbe soll natürlich auch gehen, wenn der Zähler rückwärts läuft. Dann sollen sich natürlich in beiden Feldern die Zahlen entsprechend reduzieren.



    Gibts da einen einfach Code für??



    Lieben Dank



    GRONI
  • Das klappt sehr gut, nur habe ich ein leichtes Problem.

    Ich habe diese Methode genutzt, um mein Problem aus dem anderen Thread in den Griff zu bekommen, das die Zahlen die grösser
    100 sind grösser dargestellt werden. Ich habe es folgender Maßen gelöst. Zwar ein wenig getrickst, aber klapp SOWEIT.....

    Ich lasse die Zahl die hochzählt darstellen. Wird der Wert nun grösser 100, legt GM ein Sprite über die Zahl die grösser als Hundert wird.
    So, dass bei einen Wert von z.B. 100 nur die 00 dargestellt wird. Im gleichen Zug setzt er über dieses Sprite die neue Feld2 Floor Zahl,
    die grösser dargestellt wird. Jetzt sieht es so aus, als wenn es eine Zahl ist in der die 1 gross dargestellt wird, und die 00 klein.
    Klappt wunderbar, bis ich dann bemerkte, das in dem Moment wo das Sprite zum verdecken erstellt wird, die Leistung in den Keller
    geht. Die CPU Auslastung steigt an, und das Game ruckelt vor sich hin. Ich dachte mir, dass es evtl. an einer Kollision liegt an der GM sich
    aufhängt, aber auch das abstellen hat keine Verbesserung gebracht. Weiss jemand, woran das liegt, das die Leistung abbricht, sobald ein
    Sprite über einem wert dargestellt wird???
  • Hier :)

    GML-Quellcode

    1. // Gelspeicher Darstellung
    2. // Setzt den klein geschriebenen Wert im Geldspeicher
    3. draw_set_font(MainFont2);draw_set_color(c_yellow);draw_set_halign(fa_right)
    4. draw_text(190,889,moneybank)
    5. // Da wir 2 Nullen benötigen, fragt die folgende If Schleife ab, ob der Wert 0 ist, und setzt
    6. // dann eine 0 vor die einstellige Null. Falls der Geldspeicher grösser ist wird diese 0 wieder gelöscht
    7. if moneybank=0
    8. {
    9. draw_set_font(MainFont2);draw_set_color(c_yellow);draw_set_halign(fa_right)
    10. draw_text(172,889,"0")
    11. }
    12. else
    13. if moneybank >=0
    14. {
    15. draw_set_font(MainFont2);draw_set_color(c_yellow);draw_set_halign(fa_right)
    16. draw_text(190,889,"")
    17. }
    18. //Die folgende Instance verdeckt die Zahlen grösser 100
    19. instance_create(8,881,cover1)
    20. //Die folende Instance setzt eine grosse Zahl anstatt der, die verdeckt wurde.
    21. instance_create(0,0,drawbigfonts)
    22. //*******************************************************************************************************
    23. //Punktespeicher Darstellung
    24. // Setzt den klein geschriebenen Wert im Punktespeucher
    25. draw_set_font(MainFont2);draw_set_color(c_green);draw_set_halign(fa_right)
    26. draw_text(475,889,pointbank)
    27. //Die folgende Instance verdeckt die Zahlen grösser 100
    28. instance_create(292.52,881,cover2)
    29. //Die folende Instance setzt eine grosse Zahl anstatt der, die verdeckt wurde.
    30. instance_create(0,0,drawbigfonts)
    31. //*******************************************************************************************************
    32. //Punkte Gebote Darstellung
    33. draw_set_font(MainFont2);draw_set_color(c_green);draw_set_halign(fa_right)
    34. draw_text(1115,889,global.betpoints3)
    35. draw_set_font(MainFont);draw_set_color(c_green);draw_set_halign(fa_right)
    36. draw_text(1079,877,global.betpoints2)
    Alles anzeigen
  • Okay, ersteinmal können eine ganze Menge von den "draw_set_font(MainFont2);draw_set_color(c_yellow);draw_set_halign(fa_right)" rausfliegen - wenn z.B. der font oder die Farbe gesetzt wurde, dann bleibt es auch so bis irgendwo ein anderer Font oder eine andere Farbe gesetzt wird.

    Zweitens werden bei dir andauernd instances erzeugt, ich denke mal dass du nach einer Weile ein paar tausend davon direkt übereinander haben wirst. Diese instances brauchen nur ein einziges Mal erzeugt zu werden, das draw-event aber wird mehrere male pro step ausgeführt.

    Also kommt das ins create-event:

    GML-Quellcode

    1. //Die folgende Instance verdeckt die Zahlen grösser 100
    2. instance_create(8,881,cover1)
    3. //Die folende Instance setzt eine grosse Zahl anstatt der, die verdeckt wurde.
    4. instance_create(0,0,drawbigfonts)
    5. //Die folgende Instance verdeckt die Zahlen grösser 100
    6. instance_create(292.52,881,cover2)
    7. //Die folende Instance setzt eine grosse Zahl anstatt der, die verdeckt wurde.
    8. instance_create(0,0,drawbigfonts)


    Im draw bleibt also noch:

    GML-Quellcode

    1. // Gelspeicher Darstellung
    2. // Setzt den klein geschriebenen Wert im Geldspeicher
    3. draw_set_font(MainFont2);draw_set_color(c_yellow);draw_set_halign(fa_right)
    4. draw_text(190,889,moneybank)
    5. // Da wir 2 Nullen benötigen, fragt die folgende If Schleife ab, ob der Wert 0 ist, und setzt
    6. // dann eine 0 vor die einstellige Null. Falls der Geldspeicher grösser ist wird diese 0 wieder gelöscht
    7. if moneybank=0
    8. {
    9. draw_text(172,889,"0")
    10. }
    11. else
    12. if moneybank >=0
    13. {
    14. draw_text(190,889,"")
    15. }
    16. //*******************************************************************************************************
    17. //Punktespeicher Darstellung
    18. // Setzt den klein geschriebenen Wert im Punktespeucher
    19. draw_set_color(c_green);
    20. draw_text(475,889,pointbank)
    21. //*******************************************************************************************************
    22. //Punkte Gebote Darstellung
    23. draw_text(1115,889,global.betpoints3)
    24. draw_text(1079,877,global.betpoints2)
    Alles anzeigen


    Nochmal: das Draw-Event ist das schlimmste Event von allen, und abgesehen von den eigentlichen Draw-Funktionen sollte da _nichts_ rein.


    EDIT: ich verstehe dein System nicht. Um die erste Zahl einer dreistelligen Zahl groß zu schreiben, würde das auch reichen:

    GML-Quellcode

    1. hunderter = floor(moneybank/100);
    2. zehner_einser = string_format( (moneybank - (hunderter * 100)), 2, 0);
    3. draw_set_font(font_gross);
    4. draw_text(10, 10, hunderter);
    5. draw_set_font(font_klein);
    6. draw_text(20, 10, zehner_einser);

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p-head ()

  • HAHA :)

    Wie blöd bin ich denn? :) Ein Instance_create in einem Draw Event :)

    Danke für die schnelle Hilfe!!!

    Somit ist mein Zahlen Problem nun endlich gelöst ! SCHÖÖÖÖÖÖÖÖÖN :)

    Watt isss datt schön das es so ein Forum gibt :)

    Danke vielmals!

    GRONI

    [Zusammengeschoben von CAS]

    p-head schrieb:


    hunderter = floor(moneybank/100);
    zehner_einser = string_format( (moneybank - (hunderter * 100)), 2, 0);

    draw_set_font(font_gross);
    draw_text(10, 10, hunderter);

    draw_set_font(font_klein);
    draw_text(20, 10, zehner_einser);
    Na Super :) Danach habe ich die ganzen Tage hier gefragt :)

    Das werde ich direkt mal austesten :)

    [Zusammengeschoben von CAS]

    Das klappt sehr gut :) Nur wenn die Zahl 100 ist wird sie nur mit einer Null dargestellt.
    So in etwa:
    1 0
    So sollte es aussehen:
    100

    Kannst Du mir dafür auch noch ein Lösung geben??

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

  • Ich hab jetzt zwar nicht alles gelesen aber ich weiß glaub wie du es haben willst :) (Hab doch schnell alles gelesn)
    Wie wär es wenn du drei objecte erstellen würdest. Bei dem ersten hochzählst, und wenn er dann 10 hat, das zweite um eins erhöhen, und wenn das auf 10 ist das dritte um eins erhöhen, und das dritte mit einer großen font darstellen :)

    naja bei mir klappts.
    ist aufjedenfall bisschen leichter finde ich :)

    MfG Rodrog
    Dateien
    • 123.zip

      (9,7 kB, 149 mal heruntergeladen, zuletzt: )
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Nee, das kann ich so nicht benutzen..die vorherige Lösung ist schon optimal...muss halt nur die zweite Null her....

    [Zusammengeschoben von CAS]

    p-head schrieb:

    hunderter = floor(moneybank/100);
    zehner_einser = string_format( (moneybank - (hunderter * 100)), 2, 0);

    draw_set_font(font_gross);
    draw_text(10, 10, hunderter);

    draw_set_font(font_klein);
    draw_text(20, 10, zehner_einser);
    Alles klar! :) Problem gelöst! Hab ein wenig mein Hirn qualmen lassen, und dann doch noch ne recht einfache Lösung gefunden ;)

    GML-Quellcode

    1. if moneybank = (hunderter*100){draw_text(172,889,"0")}


    Vielen Dank an alle, die mir hierbei geholfen haben :)

    Thema erledigt :)

    GRONI

    [Zusammengeschoben von CAS]

    Naja :(

    Thema noch nicht ganz erledigt....

    Habe jetzt festegestellt, dass es wunderbar klappt solange der Wert 100,200,300,400 usw ist. Dann setzt er wunderbar die "0" davor.
    Ist der Wert jedoch 105,205,305,405 usw. Lässt er die "0" wieder weg, und stellt es wieder als "1 5", "2 5", "3 5", "4 5" usw dar :(

    Hätte da noch jemand nen code der dieses Problem auch noch behebt??

    [Zusammengeschoben von CAS]

    ok, und schon wieder erledigt :)

    Hab doch noch ne Lösung gefunden :)

    GML-Quellcode

    1. hunderterM=string(moneybank div 100);
    2. zehner_einserM=string(moneybank mod 100);
    3. if (string_length(zehner_einserM)==1)zehner_einserM="0"+zehner_einserM;
    4. draw_set_color(c_yellow);
    5. draw_set_halign(fa_right)
    6. draw_set_font(MainFont2);
    7. draw_text(190,889,zehner_einserM);
    8. draw_set_font(MainFont);
    9. draw_text(147,877,hunderterM);