Prozentrechnen leicht gemacht durch mapping

      Prozentrechnen leicht gemacht durch mapping

      Man kennts vielleicht aus meiner Signatur, aber weil Code in der Signatur verwirrend ist und ich sie wieder in eine Werbetafel umwandeln will, möchte ich hier zeigen wie man einen Wert auf einen bestimmten Wertebereich umwandeln kann.

      Das Grundproblem ist meistens: du willst eine healthbar drawen lassen, die ist 64px lang und du willst dein Leben als einen Prozentwert darauf anzeigen lassen. Man wurschtelt seine Gedanken drum rum und muss sich mühsam, Prozentsatz, Prozentwert, etc ausrechnen. Mit folgendem Skript ist das aber sehr einfach zu lösen:

      GML-Quellcode

      1. ///map(val,min1,max1,ZielMin2,ZielMax2)
      2. var val = argument0;//der wert der gemapped werden soll
      3. var min1 = argument1;//minimum und maximum den dieser wert haben kann
      4. var max1 = argument2;
      5. var min2 = argument3;//minimum und maximum den dieser wert erreichen soll
      6. var max2 = argument4;
      7. return min2+(max2-min2)*((val-min1)/(max1-min1))


      Das ist jetzt fürs erste auch eine furchtbar komplizierte Formel, aber du musst ja auch nur immer das Script in dein Projekt einbinden und kannst sie benutzen. Und nicht nur für Healthbars! Wir gehen mal zwei Beispiele durch:

      //Healthbar

      GML-Quellcode

      1. hp = 1912;
      2. hpMax = 3187;
      3. hpProzent = map(hp, 0, hpMaximum, 0, 100);
      4. hpBarLength = map(hp, 0, hpMaximum, 0, 64);

      Damit hat man sehr einfach den richtigen Prozentanteil an Leben draussen und mit hpBarLength hat man die Länge in Pixel rausgerechnet. Geht der Wert unter das Min1 (in dem Fall 0) dann wächst der Balken langsam wieder. Das kannst du unterbinden, in dem du hp zwischen 0 und hpMaximum clampst.

      GML-Quellcode

      1. hpProzent = map(clamp(hp,0,hpMaximum), 0, hpMaximum, 0, 100);

      Es ist gut, das clampen nicht ins Script einzubauen, weil man sich damit ein paar Nützliche Eigenheiten dieser Map Funktion verbaut.

      //AnalogStickAchse mappen

      GML-Quellcode

      1. axis = gamepad_axis_value(0, gp_axislh);//das ist ein Wert von -1 bis 1 je nach Horizontaler Neigung des Sticks
      2. direction = map(axis, -1, 1, 0, 360);

      Damit sieht das object wenn man den Stick loslässt in Richtung 180 grad und richtung 0 wenn man ihn nach links bewegt. Man kann also auch durch den 0 Durchgang durch mappen! Das ist der große Vorteil von dieser Funktion. Wann immer du einen Wert in einen anderen Bereich verschieben willst, kannst du es nun tun.

      Es ist ein bisschen Programming Blackmagic und wenn ich mehr auf die Formel eingehen soll, dann mach ich das gerne. For now, so long, viel Spaß damit.
      PS: ich hab die Formel nicht erfunden, aber mir ist aufgefallen, dass es diese Funktion nicht standardmäßig im GM gibt.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)