Ergebnis 1 bis 16 von 16

Thema: Held nach der Maus ausrichten

  1. #1

    Held nach der Maus ausrichten

    Hallo ich hoffe eine/r von euch kann mir helfen ich überleg schon seit Stunden wie ich das machen soll und weiss nicht wie...

    also:
    Durch die Mausunterstützung der Ineluki-Patches lass ich (im RM2k) die Position der Maus abfragen...jetzt möchte ich es so hinbekommen, dass der Held in eine der 8 möglichen Richtungen schießt, wenn ich mit der Maus klicke, und zwar relativ dazu, wie die Maus zu ihm steht, so dass er mehr oder weniger immer zur Maus schaut.
    Und zwar sollte das so sein, dass der Held nicht nur dann z.B. nach oben schaut, wenn die Maus exakt über ihm ist, sondern in einem gewissen Raum, so dass jede der 8 möglichen Richtungen genau 1/8 des Raums um den Helden bekommt.

    Hoffentlich hab ich mich verständlich genug ausgedrückt...

  2. #2
    Die X-Position und die Y-Potion der aktuellen Mausposi nehmen, in ne 2 andere Variablen speichern, die dann durch 16 teilen ( So bekommt man die koordinaten raus) dann in 2 ander varis, die x und y pos speichern, und nach altem Rezept über Forks mit den geteilten positionen aus der Maus vergleichen! Fertig!
    Sind die Bedingungen erfüllt, machst du halt ne Moveevent in dem Der Held sich in die Richtung dreht...
    Das ganze muss in einem PP-Event, undzwar ohne Wait!!!!!!!! Keine Sorge es wird nich hacken, und wenn odch hast du was nicht richtig gemacht^^
    Ich habs nämlich schon selbst probiert und es hat geklapt.

    Mfg R.D.

  3. #3
    Hmm ja auf die Idee bin ich auch schon gekommen nur was ist wenn die Maus weiter vom Helden weg ist? Dann vergrößern sich die Abstände und der Raum, der jeder der 8 Richtungen zugeordnet wird, wird größer...ich hab schon versucht, das mit den Verhältnissen der Koordinaten untereinander zu lösen doch dann wirds sehr kompliziert und funktioniert nie so wie ich will...

  4. #4
    Ganz einfach du rchnest die Posi, des Helden - der posi der Maus, nun muss du nur noch abragen machen mit 1 und -1
    Steht der Held rechts (pos=12) und die maus weiter links (pos=6)
    12-6=6
    Da es über 1 ist heißt es die Maus ist links
    Würde die maus weiter rechts stehen (pos=15)
    12-15=-3
    Da es -1 oder kleiner ist heißt das die Maus ist rechts

  5. #5


    So mein ich das...in der Mitte das ist der Held und es soll herausgefunden werden in welchem der (schwarz und weißen) Sektoren er sich befindet...es sind 8 Sektoren stellvertretend für die 8 Richtungen.

    /edit: Ich hoffe ihr habt das nicht falsch verstanden ist mir grad so aufgefallen...ich meinte in welchem der Sektoren sich die Maus befindet...hoffe mal dass habt ihr euch gedacht weil der Held ja in der Mitte steht...sry

    Geändert von Adamaro (22.03.2008 um 20:25 Uhr)

  6. #6
    Na Dann wird ich einfach die Mitte als X-Scene und Y-Scene das gleiche dann beim Held. Das eine - das andere und Wenn de nun mit Forks abfragst, dann kannst du doch herrausfinden in welchem Sektor der Held sich befindet
    Bei schrägen dann halt in den Forks nochmal Forks zu überprüfung
    z.B. abfrage der X werte, danach die der y-Werte
    Sind die dann kleiner oder größer muss sich der Held in einem der Sektoren befinden...

  7. #7
    Ich werds mal probieren...bzw mir ne andere Lösung einfallen lassen^^

  8. #8
    Strahlensatz:
    Bei gleichbleibendem Winkel ist das Verhältnis der Ankathete und Gegenkathete in einem Dreieck mit rechtem Winkel identisch

    Erst prüfst du, zu welchem Viertel in NW, NE, SW, SE der Punktam ehesten gehört (sprich ob X- und Y-Abstand jeweils negativ oder positiv sind)
    Dann schaust du, welcher Abstand im Betrag größer ist um ihn nochmal in ein Viertel zuordnen zu können, nur diesmal N, S, E, W

    Anschließend rechnest du auf einem Blatt Papier geometrisch aus, wie groß die Gegenkathete ist, wenn der Punkt gerade von schwarz auf weiß wechselst und die Ankathete eine Länge von 1 hat
    Dieses Ergebnis ist das Verhältnis von Gegenkathete und Ankathete auf eben jenem Übergang, nennen wir das Ergebnis V.
    Dein Algorithmus teilt jetzt die Gegenkathete durch die Ankathete (der betragsgrößere Abstand ist die Länge der Ankathete, der andere der der Gegenkathete) . Ist das, was rauskommt, kleiner als V, so ist der Punkt im Schwarzen, ist er größer, im Weißen.

    Die errechneten Daten sind genug, um eindeutig zuteilen zu können

    Da der Maker in ganzen Zahlen rechnet und V kleiner als 1 ist, musst du alle Werte mit einem Faktor malnehmen. (100 passt)

    alles klar oder brauchst du Skizzen? Ich kann dir auch Pseudocode schreiben wenn du willst.
    Kommst du mit dem Ausrechnen von V klar? (weiß jetzt nicht, wie weit du schon in Mathematik bist)

  9. #9
    Müsst ich eigentlich hinbekommen aber so ein grober Code wär ganz nett...wenns nicht zuviel Arbeit macht.

    /edit: Hab da oben noch was dazu geschrieben bei dem Bild...hoffe mal ihr habt das richtig verstanden ich hatte mich da verschrieben...

    Geändert von Adamaro (22.03.2008 um 20:26 Uhr)

  10. #10
    //Ich gehe von 8 Switchen aus, jeder steht für ein Gebiet und der Code schließt nun Switch für Switch aus bis nur noch einer anbleibt

    Change Switch Range (N, NW, W, SW, S, SE, E, NE) ON
    Change Variable Y = Mouse Y Position
    Change Variable Y -= Hero Scene Y
    Change Variable X = Mouse X Position
    Change Variable X -= Hero Scene X

    //Beträge
    Change Variable BetY = Y
    fork (BetY < 0) { BetY *= -1 }
    Change Variable BetX = X
    fork (BetX < 0) { BetX *= -1 }

    Show Message "Test 1"
    fork (X = 0) { fork (Y=0) { Change Switch Range (N, NW, W, SW, S, SE, E, NE) OFF } }

    fork (Y < 0) { Change Switches S, SE, SW OFF }
    else { Change Switches N, NE, NW OFF }
    fork (X < 0) { Change Switches E, NE, SE OFF }
    else { Change Switches W, NW, SW OFF }

    Show Message "Test 2"
    fork (BetX < BetY) {
    Change Switches W, E OFF
    Change Variable GegK = BetX
    Change Variable AnK = BetY
    }
    else {
    Change Switches N, S OFF
    Change Variable GegK = BetY
    Change Variable AnK = BetX
    }

    //Teile Gegenkathete durch Ankathete und schaue das dadurch errechnete Verhältnis an
    Show Message "Test 3"
    Change Variable GegK *= 10
    Change Variable GegK /= AnK
    fork (GegK >= 5) { Change Switches N, S, E, W OFF }
    else { Change Switches NE, NW, SE, SW OFF }

    Show Message "Test 4"

    //Jetzt müsste nur noch einer der Switche an sein, der Code bevorzugt schwarze Gebiete, Norden vor Süden und Westen vor Osten falls der Mauszeiger auf einem Übergang liegt

    Geändert von Dhan (23.03.2008 um 09:35 Uhr)

  11. #11
    Puh okay mal gucken ob ich das im Maker hinkrieg....
    aber auf jeden Fall schonmal vielen Dank für die Mühe^^

  12. #12
    Hmmm nein da sind wohl 1,2 Fehler drin...er geht immer nach links egal ob der Zeiger rechts oder links von ihm ist und rechts-oben und links-unten sind vertauscht soweit ich das bis jetzt beurteilen kann..

  13. #13
    Seltsam... kannst du den Code seperieren und hochladen damit ichs mir ma anschauen kann?
    Im Code is ein klitzekleiner Fehler:
    fork (BetX < 0) { BetY *= -1 }
    soll natürlich
    fork (BetX < 0) { BetX *= -1 }
    heißen

    Wenn du Zeit zum Testen hast bevor ichs hab, bau mal nach jedem Schritt Textnachrichten ein und schau dir bei jeder Textnachricht mit F9 die Variablen- und Switchbelegung an
    Ich hab den Code jetz überarbeitet, sprich an passenden Stellen Messages eingebaut (die das Script einfrieren bis man Enter drückt, ideal zum Testen ob die Varis stimmen)

    Geändert von Dhan (23.03.2008 um 08:19 Uhr)

  14. #14
    Okay ich lad den Code mal hoch:



    Ich hoff mal, dass ich alles richtig abgeschrieben hab und der Rest funktioniert ja auch.

  15. #15
    Ein fertiges Spiel bräuchte ich, wobei ich natürlich nicht dein Projekt zu sehen brauche, sprich eine Kopie des Events in ein neues Projekt (sowie natürlich Dateien damit Mausposition funzt) passt
    Und wie gesagt, schau mal, wie die Variablen sich verändern während dem tatsächlichen Durchlauf

    edit: humm ich scripts mir grad schnell selbst, zumindest weiß ich jetzt, dass der Code korrekt abgeschrieben ist, sprich kein Abschreibfehler das Problem ist sondern wohl der Algorithmus selbst

    edit: joa, irgendwas passt mit dem Code nicht, mein Script funzt auch nech wies soll, ich setz mich ma dran

    edit: HAAA ich habs
    Vertausch in den fork(X < 0) und fork(Y < 0) das X und Y und gut is



    Für die Allgemeinheit als Script:
    Positions-Script

    Geändert von Dhan (23.03.2008 um 10:58 Uhr)

  16. #16
    Jaaaa danke^^ Die Idee hat ich in etwa auch schon...weil mir aufgefallen ist, dass die X-Variable ja gar nix mit Norden und Süden zu tun hat...

    Jetzt kann ich mein mausunterstütztes AKS endlich bauen...eine schwierige Hürde ist schonmal genommen^^

Berechtigungen

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