Der Maker - Mathematisches Genie oder Verrückter Wissenschaftler?

  • Hi!


    Tja, dass ist die Frage! :D


    Ich möchte einen Abzug (5%) bei HP und MP beim Spieler berechnen. Die HP des Spielers betragen 544, die MP liegen bei 50!


    Der Zeexi berechnet mal im Kopf


    544 : 100 = 5,44

    5,44 * 5 = 27,5


    Der Abzug der HP beträgt 27,5 betragen!


    50 : 100 = 0,5

    0,5 * 5 = 2,5


    Der Abzug der MP beträgt 2,5 betragen!


    Der Maker rechnet


    (544 : 100) * 5 = 25


    (50 : 100) * 5 = 0


    Der Abzug der MP beträgt 0 betragen!


    Auswertung


    Woher kommt dieser eklatante Unterschied? 27,5 zu 25 bei den HP und 2,5 zu 0 bei den MP. Ich kann mir ja noch vorstellen, dass er rein mit Intagern arbeitet obwohl ich irgendwie im Hinterkopf habe, dass er eigentlich mit Floats rechnet. Dann müsste er aber auf die nächste Zahl auf oder abrunden. Er scheint aber Intager zu nutzen und diese auch noch zu runden. 8o


    Ich habs mit den normalen Berechnungen im Maker versucht, per Script und auch zwischen durch noch die Variablen gerundet. Selbes Ergebnis!


    Code
    $gameVariables.setValue(35, $gameVariables.value(35) / 100);
    
    $gameVariables.setValue(35, Math.round($gameVariables.value(35)));
    
    $gameVariables.setValue(35, $gameVariables.value(35) * 5);
    
    $gameVariables.setValue(35, Math.round($gameVariables.value(35)));

    Hat jemand ne Idee was der Maker für nen Unsinn treibt?

  • Haha!


    Ein Schritt mit '_data' statt 'setValue':


    Code
    $gameVariables._data[35] = ($gameVariables.value(35) / 100);
    
    $gameVariables._data[35] = ($gameVariables.value(35) * 5);


    Damit schafft er es nun folgendes zu rechnen


    (544 : 100) * 5 = 27,200000000000003


    (50 : 100) * 5 = 2,5


    27,5 zu 27,200000000000003... nun ja er ist anscheinend nicht sonderlich präzise beim rechnen. :D


    2,5 zu 2,5... das hat er hinbekommen.


    Gut runden wir wieder.


    Bei den HP kommt er von 27,200000000000003 nun nach dem runden auf 25!


    Bei den MP kommt er von 2,5 nun nach dem runden auf 5!


    Er rundet wieder auf den nächsten vollen 5er! Was rundet der? :p:

  • Um die Frage etwas genauer zu beantworten:

    Code
    $gameVariables.setValue(…)

    Dieser Aufruf rundet immer auf die nächstkleinere Ganzzahl ab.


    Die entsprechende Funktion für Schalter macht das übrigens nicht, da werden die Werte stattdessen beim Lesen in Booleans konvertiert.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!