Naja, Luftlinien sind lineare Funktionen.
Erstmal fragst du ab, ob sie eher horiziontal oder eher vertikal verläuft, sprich ob der Abstand Start-Ziel auf der X oder auf der Y-Achse größer ist.
Angenommen, der Abstand ist auf der X-Achse größer, die Linie also eher horiziontal.
Dann willst du die lineare Funktion finden, die die beiden verbindet.
Die Steigung der Funktion ist schonmal leicht zu berechnen, DeltaY durch DeltaX, anschließend den Start einsetzen und du bekommst die genaue Funktion raus, in einer Vorschrift der Art:
f(x) = m*x + c
bzw das m und das c.
Da der Maker nur Integer speichert, denk dran, die Zahlen immer mit 10 oder 100 multipliziert zu halten um eine oder zwei Nachkommastellen speichern zu können.
Daraus kannst du eine Zuordnung x -> y erzeugen wobei du natürlich da du feldweise arbeitest runden musst, wenn du zwei Nachkommastellen gespeichert hättest, würde aus einem 344 also eine 3, denn 3,44 gerundet ist 3.
Die Frage, ob man sich nun auf der Linie befindet, ist zu lösen, indem du die X-Koordinaten des Spielers in das System eingibst und rausschaust, ob es die richtigen Y-Koordinaten ausspuckt. (bzw andersrum bei eher vertikalen Linien)
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!
Hm, irgendwas hab ich falsch gemacht:
Das ist auf einer Seite, die wie folgt aufgerufen wird:
Jetzt weiß ich nicht, ob das überhaupt so stimmt und welchen Grenzwert ich einsetzen soll :/
€dit: Argh! Ich bin so blöd! xD
Hab die Formel vergessen und falsch verstanden! Mach mich nochmal ran und poste, wenns klappt
€dit²: kk, hab's fast:
zweite Seite:
Das einzige Problem ist, das er rumspinnt, wenn Delta_Y = 0 ist, also eine perfekte horizontale Linie
Das einzige Problem ist, das er rumspinnt, wenn Delta_Y = 0 ist, also eine perfekte horizontale Linie
...
Du kannst vorm Rechnen abfragen ob Y-Start = Y Ziel und je nachdem einen anderen Weg zum rechnen verwenden, da man die Luftlinien-Bedingung auf einer horizontalen Luftlinie mit einem If abfragen kann. Ansonsten weiss ich nicht mehr ob der Maker ein Problem damit hat die 0 zu Teilen (oder mit der 0 zu Teilen(vieleicht beides^^)) kanns leider nicht testen.
Ansonsten weiss ich nicht mehr ob der Maker ein Problem damit hat die 0 zu Teilen (oder mit der 0 zu Teilen(vieleicht beides^^)) kanns leider nicht testen.
...
Die 0 zu teilen (0 : 10) ist unproblematisch. Nur kannst du durch die 0 selbst nicht teilen. Das kann kein System afaik. Das wären ja unendlich viele Ergebnisse. Der Maker fängt das allerdings bei einer solchen Teilung den Fehler ab. Wenn du beim Maker versuchst durch 0 zu teilen, dann belässt der Maker die Variable einfach bei ihrem alten Wert.