Ergebnis 1 bis 6 von 6

Thema: [VX Ace] Problem bei Heilzauber

  1. #1

    [VX Ace] Problem bei Heilzauber

    Hallo!

    Ich arbeite zur Zeit mit dem RPG Maker VX Ace und habe auch gleich ein Problem entdeckt, das ich irgendwie nicht beheben kann.
    Ich habe einen Heilzauber erstellt, dessen Heilstärke (sobald ein bestimmtes Ausrüstungsstück angelegt wird) teilweise von den maximalen HP des Nutzers beeinflusst wird.
    An sich stellt der Zauber 50% der maximalen HP des Ziels wieder her. Mit Hilfe des Ausrüstungsstücks soll die Stärke nun um 50% variieren (das heißt der Zauber kann im besten Fall 75%, im schlechtesten Fall 25% der maximalen HP wiederherstellen).
    Als Formel habe ich Folgendes verwendet:

    (b.mhp*0.5)*((a.hp/a.mhp)+0.5)

    Wenn der Nutzer des Zaubers volle HP hat, dann werden auch 75% der max. HP geheilt. Sobald der Nutzer aber weniger als 100% der HP hat, heilt der Zauber, unabhängig von den HP des Nutzers, nurnoch 25% der max. HP des Ziels.
    Ich bin mir jetzt nicht sicher, ob ich einen Fehler in der Formel habe, oder aber ein anderes Problem irgendwo besteht.

    Ich wäre zutiefst dankbar, wenn mir jemand hilft.

  2. #2
    Der Fehler hat mit der Reihenfolge der Operationen zu tun. Du solltest zunächst den Prozentsatz komplett berechnen und erst ganz am Schluss mit b.mhp multiplizieren.

    Die Formel würde dann so aussehen: b.mhp*(0.5*((a.hp/a.mhp)+0.5)

    Hätte a 100% der MaxHP wäre der Prozentsatz z. B.:0.5*1.5 = 75%
    Hätte a 60% der MaxHP wäre der Prozentsatz Z. B.: 0.5*1.1 = 55%
    Hätte a 20% der MaxHP wäre der Prozentsatz Z. B.: 0.5*0.7 =35%

    So hattest du es dir gedacht, oder?

    Geändert von Kelven (01.04.2014 um 12:46 Uhr)

  3. #3
    Könnte es sein, dass die Variablen "hp" und "mhp" beide ganzzahlig (Integer) sind?
    In dem Fall ist es naheliegend, dass deine Division von zwei Integern zwangsläufig zu dem Ergebnis 0 führt falls der Zähler kleiner ist als der Nenner.

    Versuch doch einmal die folgende Formel:
    (b.mhp * 0.5) * (( (1.0 * a.hp) / a.mhp) + 0.5)

  4. #4
    Stimmt, das kommt auch noch hinzu. Alternativ zu Cornix' Beispiel müsstest du die Variablen auch mit to_f in eine Fließkommazahl umwandeln können. Beim Ergebnis müsstest du dann noch die Kommastellen mit .truncate abschneiden.

  5. #5
    Zitat Zitat von Kelven Beitrag anzeigen
    Der Fehler hat mit der Reihenfolge der Operationen zu tun. Du solltest zunächst den Prozentsatz komplett berechnen und erst ganz am Schluss mit b.mhp multiplizieren.

    Die Formel würde dann so aussehen: b.mhp*(0.5*((a.hp/a.mhp)+0.5)

    Hätte a 100% der MaxHP wäre der Prozentsatz z. B.:0.5*1.5 = 75%
    Hätte a 60% der MaxHP wäre der Prozentsatz Z. B.: 0.5*1.1 = 55%
    Hätte a 20% der MaxHP wäre der Prozentsatz Z. B.: 0.5*0.7 =35%

    So hattest du es dir gedacht, oder?
    Leider stimmt das nicht Kelven. Die Multiplikation ist eine assoziative Operation.
    Es gilt: (a * b) * c == a * (b * c) == a * b * c
    Daher macht es keinen Unterschied ob die Formel nun
    b.mhp * ( 0.5 * REST )
    anstatt
    (b.mhp * 0.5) * REST
    lautet.

  6. #6
    Ja, da hab ich mich geirrt. Mir kam es so vor, als ob es einen Unterschied macht.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •