Ergebnis 1 bis 14 von 14

Thema: Zielerfassung bei mehreren Zielen auf variablen Positionen?

  1. #1

    Zielerfassung bei mehreren Zielen auf variablen Positionen?

    Ich experimentiere gerade etwas mit einem KS bei dem sich gegner und mehrere Helden über eine normale Map bewegen, bzw gesetzt werden. Das ganze ist rundenbasiert.

    Für viele Probleme hab ich schon einen Lösungsansatz gefunden aber was die KI betrifft bin ich noch nicht sehr weit.

    Weiss jemand wie ich es hinkriege dass ein Event in einem bestimmten Umkreis um ein andres Event(Gegner oder Chara der schiessen will) als ziel in reichweite "erkannt" wird?

    (Ich verwende übrigens den RPG-Maker2000)

    Die Events bewegen sich alle entweder nach Script oder eingabe des Pfades/Zielortes.

    Geht das irgendwie? Gibt es Spiele/Scripte bei denen sowas schon gemacht wurde?

    Wäre schön wenn mir da einer helfen könnte weil mir qualmt schon ziemlich der Schädel...

  2. #2
    Wenn Hindernisse dort keine Rolle spielen kannst du einfach die x und y Koordinaten der beiden abziehen und den Betrag davon nehmen. Das ist zwar nur eine Annäherung an die korrekte Entfernung, aber vielleicht reicht das schon aus. Ansonsten mußt du wohl den altbekannten Satz des Pythagoras einsetzen.

  3. #3
    :watt:


    Satz des was? Wie geht'n der? §doof

    Übrigens geht es dabei um recht viele Events die es abzufragen gilt. Gibts da ne Möglichkeit das das ganze nicht gar so ausufert?

  4. #4
    Satz des Pythagoras:

    das Quadrat über der Hyputinuse ist gleich den Quadraten über den Katheten,

    anders ausgedrückt,

    a²+b²=C²


    lernt ihr nix mehr in der Schule?

  5. #5
    Und mit

    c = Wurzel( a²+b² ), wobei a = x2 - x1 und b = y2 - y1 sind

    kriegst du genau die Entfernung von einem Punkt zum anderen. Frag mich aber nicht wie man Wurzeln im Maker berechnet. Ich hoffe jedenfalls, dass das stimmt, aber da ich schon alles von Mathe wieder vergessen hab, gibt es keine Gewähr darauf.

    Geändert von Kelven (02.05.2005 um 22:03 Uhr)

  6. #6
    Zitat Zitat von DR_Zeph
    Satz des Pythagoras:

    das Quadrat über der Hyputinuse ist gleich den Quadraten über den Katheten,

    anders ausgedrückt,

    a²+b²=C²


    lernt ihr nix mehr in der Schule?
    Die Summe der Quadrate über den Katheten ist gleich dem Quadrat über der Hypotenuse.

    Ist die eingentlich ganz genaue Definition! ;P

  7. #7
    Der Maker kann ja normalerweise keine Wurzel ziehen (es gibt aber auch ein Annäherungsverfahren, spontan weiß ich aber nicht wie das genau geht). Es gibt aber auch eine einfache Möglichkeit:
    Wenn d die Distanz ist, müsste man sie ja mit c vergleichen, um heruaszufinden, ob das Ziel innerhalb der Reichweite liegt. Da man ja dafür die Wurzel ziehen müsste, kann man auch d² mit c² vergleichen - und c²=a²+b² , es wird also keine Wurzel benötigt...

  8. #8
    Wenn ich mich recht entsinne, und mich meine Maker bzw. Mathe Kenntnisse nicht vollende verlassen haben(im Zweifelsfall eher die Mathekenntnisse )
    funktioniert das Annäherungsverfahren folgendermaßen:
    Du hast eine Variable in der die Zahl gespeichert ist von der die Wurzel gezogen wird. Diese Variable heißt bei mir ab jetzt Ergebnis.
    Und du hast eine Variable in der das Ergebnis der Wurzelziehung gespeichert werden soll, welche ab jetzt Wurzel heißt...
    Desweiteren hasst du eine Variable in der Anzahl der bisherigen Wurzelziehungen gespeichert werden: die Variable Anzahl.

    Du machst einen Zyklus. Als erstes wird die Variable Wurzel mit sich selbst malgenommen. Danach wird abgefragt ob die Variable Wurzel jetzt >= (größer/gleich) der Variable Ergebnis ist. Wenn ja wird der Zyklus unterbrochen und du hast dein Ergebnis. Wenn nein wird Wurzel mit sich selbst dividiert, damit wir wieder bei dem Wert 1 sind und Anzahl addiert. Als nächstes addierst du 1 zu der Variable Anzahl. Und dann fängt der Zyklus von vorne an...

    Sinn dahinter ist folgender: deine Anfangswerte für Wurzel und Anzahl sind 1. Zuerst probiert der Maker ob 1*1 das gewünschte Ergebnis ist. Falls nicht wird der Wert der Variable Wurzel wieder auf 1 zurückgesetzt und mit Anzahl addiert, was ihr den Wert 2 geben würde. Dann wird wieder probiert ob Wurzel(in diesem Fall wäre es 4) gleich oder größer als Ergebnis ist(wenn das Ergebnis 2, 3 oder 4 wäre hättest du also dein Ergebnis). Falls nicht wird Wurzel wieder auf 1 gesetzt, mit Anzahl, die jetzt den Wert 2 hat, addiert und so weiter...

    Dieses System ist natürlich nicht sonderlich genau, aber was besseres kann man mit dem Maker afaik nicht realisieren... Dazu fehlt ihm entweder die Wurzelfunktion oder die Funktion das Variablen nachkommastellen haben können...

    cya
    Deathball

    edit: dasselbe hat BenniXD auch gemeint, wenn ich mich nicht irre....

  9. #9

    habs schon

    Habs hingekriegt(YIPPIEE)! Und das auch ohne zu wissen wie Hyperteenüsse schmecken und ob man statt der Wurzeln auch Blätter nehmen kann hehe...

    Im Grunde brauchte ich nur die Koordinaten der beteiligten Events zu erfassen, dann X-Koordinate des ziels minus X-koordinate vom Ausgangspunkt, das gleiche mit Y und nachschauen ob die Werte unter 0 liegen. Wenn ja, dann schnell das doppelte davon abziehen um sie wieder ins Plus zu kriegen und dann X und Y zusammenzählen und mit der Reichweite der Aktion vergleichen (oder soähnlich, hab jetzt nicht den exakten Ablauf im Kopf).

    Ich war in Mathe immer ne ziemliche Niete und damals war für mich auch überhaupt nicht ersichtlich das mir dieser ganze Formelscheiss jemals was nützen würde (wie man sich doch irren kann) aber wie hat meine Mama immer gesagt: dumm kannste sein, du musst dir nur zu helfen wissen!

    Schlaue Mama

    Was jetzt noch ansteht ist ne möglichst einfach(umzusetzend)e und genaue Wegfindungsrutine - kennt sich damit jemand aus?

  10. #10
    Klar kann man mit dem RPG-Maker Wurzeln ziehen^^
    Ist allerdings ein wenig aufwendig:
    Es gibt nur eine Einschränkung! Der Maker kann nur mit Variablen vom Typ Integer, sprich Ganzzahlen, rechnen. Heißt also, dass die Wurzel, wenn sie ungerade ist falsch ist.
    Beispiel:
    Sqr(16) = 4 <--- Ganzzahliges Wurzelergebnis
    Sqr(8) = 2,82842712474619...... <--- Irrationales Wurzelergebnis

    Man müsste sich im Maker eine kleine Funktion schreiben, die über ein CE aufgerufen wird:

    Wir haben 2 Variablen V0001 und V0002.
    In V0001 befindet sich die Zahl aus der die Wurzel gezogen werden soll, hier = 64. V0002 hat den Wert 0. Eine dritte Variable V0003 dient uns als Zähler.

    Im Event machen wir folgendes:

    <>Loop
    <>Note: Cycle leitet eine Loop-Schleife ein, die in diesem Falle immer wiederholt wird, bis eine bestimmte Bedingung erreicht ist.
    <>Change Var: Var[0002] (*)- Var[0002]
    <>Note: Wir multiplizieren V0002 mit sich selbst.
    <>Note: Im folgenden Schritt überprüfen wir, ob V0002 größer V0001 ist.
    <>If Var(0002) V[0001] (>)
    <>Note: Ist das der Fall, sind wir bereits über V[0001]. Dann beenden wir die Schleife und geben den Wert -1 zurück.
    <>Break
    <>Change Var: Var[0002] (Set)- -1
    <>
    :End Case
    <>If Var(0002) V[0001] (=)
    <>Note: Tritt dieser Fall ein, dann haben wir unsere Zahl und wir beenden die Schleife. Der Zähler beeinhaltet die Wurzel von V0001. Wir müssen also noch Var[0002] den Wert von Var[0003] übergeben. Dann die Schleife verlassen.
    <>Change Var: Var[0002] (Set)- Var[0003]
    <>Break
    <>
    :End Case
    <>
    :End Case
    <>Note: Tritt keiner dieser Fälle ein, dann ist die Zahl noch kleiner als die Wurzel aus V0001 und wir geben V0002 den Wert des Zählers, der vorher um eins erhöht wird. Dann wiederholt sich die Schleife.
    <>Change Var: Var[0003] (+)- 1
    <>Change Var: Var[0002] (Set)- Var[0003]
    <>
    :End Loop
    <>
    --------------------------------
    Das ist eine Möglichkeit. Allerdings sei hier angemerkt dass diese Funktion nur eine Wurzel rechnen kann, wenn das Ergebnis der Wurzel eine Ganzzahlige Zahl ist. Ungerade sowie irrationale Zahlen können hiermit nicht ausgerechnet werden.

    Geändert von HyperRPG (07.05.2005 um 12:31 Uhr)

  11. #11
    den satz kenn ja sogar ich schon und ch bin 12 tstststs

  12. #12
    Zitat Zitat
    Was jetzt noch ansteht ist ne möglichst einfach(umzusetzend)e und genaue Wegfindungsrutine - kennt sich damit jemand aus?
    Ich fürchte, eine einfach umzusetzende wirst du nicht finden. Das wäre dann so was wie Step toward hero. Richtig funktionieren tut natürlich die A* Methode, die lachsen ja mal implementiert hat ( der Thread sollte hier noch herumfliegen ), aber die ist weder einfach umzusetzen noch meiner Meinung nach für den Maker geeignet.

  13. #13
    Zitat Zitat von Kelven
    Und mit

    c = Wurzel( a²+b² ), wobei a = x2 - x1 und b = y2 - y1 sind

    kriegst du genau die Entfernung von einem Punkt zum anderen. Frag mich aber nicht wie man Wurzeln im Maker berechnet. Ich hoffe jedenfalls, dass das stimmt, aber da ich schon alles von Mathe wieder vergessen hab, gibt es keine Gewähr darauf.
    satzt des pythagoras und der maker? ist wie pommes ohne ketchup! was bringt das? ist ein event 3x und 3y felder weg, kann man nicht eingeben, der soll sich 4.24 felder diagonal bewegen.

  14. #14
    Es ging Lil_Lucy ja auch nicht um das Bewegen sondern um die Berechnung der Entfernung und da ist diese Methode genauer.

Berechtigungen

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