PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Held nach der Maus ausrichten



Adamaro
22.03.2008, 17:02
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...

R.D.
22.03.2008, 17:18
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.

Adamaro
22.03.2008, 17:51
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...

R.D.
22.03.2008, 18:13
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

Adamaro
22.03.2008, 18:24
http://img164.imageshack.us/img164/6233/unbenanntil0.th.png (http://img164.imageshack.us/my.php?image=unbenanntil0.png)

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

R.D.
22.03.2008, 18:32
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...

Adamaro
22.03.2008, 18:42
Ich werds mal probieren...bzw mir ne andere Lösung einfallen lassen^^

Dhan
22.03.2008, 19:39
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)

Adamaro
22.03.2008, 20:21
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...

Dhan
22.03.2008, 23:07
//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

Adamaro
22.03.2008, 23:21
Puh okay mal gucken ob ich das im Maker hinkrieg....
aber auf jeden Fall schonmal vielen Dank für die Mühe^^

Adamaro
22.03.2008, 23:45
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..

Dhan
23.03.2008, 08: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)

Adamaro
23.03.2008, 08:41
Okay ich lad den Code mal hoch:

http://img213.imageshack.us/img213/7848/codebs0.th.jpg (http://img213.imageshack.us/my.php?image=codebs0.jpg)

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

Dhan
23.03.2008, 09:07
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 (http://dhan.de/rpg/script/position.rar)

Adamaro
23.03.2008, 17:19
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^^