PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XY-koordinaten



Mr.D
27.06.2005, 23:12
Hi,ich hab ein paar fragen:

1. Wie kann ich es machen dass der Hero wenn er in den Radius von seinem Gegner kommt angegrifen wird

2.Wie lass ich den Gegner erkennen ob der Hero hinter,vor,links oder rechts von ihm steht.

3.Wie mach ich es das der Hero sich hinter obj. verstecken kann und so der Gegner ihn länger suchen muss.

Danke schonmal.

Mfg. Mr.D 8)

Dhan
28.06.2005, 07:36
1. Für einen wirklichen Radius bräuchtest du eine Sinusberechnung, das wäre aber übertrieben für ein Rastersystem wie es der Maker hat (in Pixelsystemen wie man es beispielsweise in SoM findet, würds unerläßlich sein)
Ich würde an deiner Stelle erstmal den Betrag des X-Koordinaten-Abstandes (Betrag ist der höhere Wert minus dem niedrigeren, jedenfalls wenn es um Zahlen über 0 geht und das tuts ja... frag einfach ab, ob HeldenXKoords größer sind als MonsterXKoords und wenn ja, Helden-Monster, wenn nein Monster-Helden oder machs mim Ergebniss, wenn das unter 0 ist mal minus 1)
zum Betrag des Y-Koordinaten-Abstandes addieren und dann ganz einfach ab einem bestimmten Wert (3?) das Monster angreifen lassen

2. Massig Forks. Unter Forks kannst du abfragen, ob ein Event (also das Monster in eine bestimmte Richtung schaut.)
Erstmal ein paar Begriffsdefinitionen damit ich net ewig lange Dinger schreiben muss:
X ist der Betrag des XKoordinatenabstandes
XP ist MonsterXKoords minus HeroXKoords
Y und YP sind dasselbe für die YKoords
L, R, U, O sind die Blickrichtung des Monsters

Der Held steht eher links vom Monster, wenn gilt: X > Y, XP > 0
Eher rechts: X > Y, XP < 0
Eher oben: X < Y, YP > 0
Eher unten:X < Y, YP < 0
Bezeichnen wir die 4 Fälle mal als EL, ER, EO und EU

Das Monster sieht den Held frontal für folgende Kombinationen:
L + EL, R + ER, O + EO, U + EU
Das Monster sieht den Held seitlich für folgende Kombinationen:
L/R + EU/EO, U/O + EL/ER ( / heißt nicht "geteilt durch" sondern "oder" in dem Fall)
Das Monster sieht den Helden garnet weil er hinter ihm ist für folgende Kombis:
L + ER, R + EL, O + EU, U + EO

Wenn du das noch erweitern willst, dann vergleich den Unterschied von X und Y und mach bei verschiedenen Unterschiedsstärken verschiedene Muster, ums dir so zu erklären, je ähnlicher die Werte sind, desto näher ist der Held an einer Diagonale eines Systems mit dem Monster im Mittelpunkt
du kannst auch noch für X = Y Sachen machen, das is dann erfüllt, wenn der Held genau auf der Diagonale ist, also perfekt schräg zum Monster steht sodass eben XAbstand und YAbstand gleich hoch sind, solltest du sogar

3. Entweder du machst im Versteck unsichtbare Bodenevents die einen Switch aktivieren, der eben das längere Suchen auslöst oder du prüfst ganz aufwendig nach, ob eins der vielen Verstecke zwischen Held und Monster ist... sehr undynamisch sag ich dazu.

Eine weitere Methode wäre es, das Monster sehr schenlle unsichtbare Events in Blickrichtung regelmäßig abfeuert, kann sich eins nicht mehr bewegen, wird es gelöscht, trifft es den Helden, sieht das Monster ihn... halte ich aber für doof irgendwie ^^

Mr.D
28.06.2005, 18:06
Ich hab das was du erklärt hast nicht wirklich verstanden. :(
Kann jemand es nochmal erklären oder nen code posten.


Mfg. Mr.D 8)

Oburi
28.06.2005, 18:23
Eigentlich ists ganz einfach zu erkennen ob du über dem Gegner, rechts links oder sonstwo stehst.... Du musst einfach die X und Y Koordinaten der Events, bzw Hero, nehmen und dann wenn X Gegner 1 größer als X Hero ist, weißt du z.B. das der Held links vom Gegner steht. Ist X Gegner 1 kleiner, steht der Held rechts vom Gegner.
Das Gleiche mit Y. Y Gegner 1 größer als Y Hero, Gegner steht unterm Held.
Y Gegner 1 kleiner als Y Hero dann ist der Held unterm Gegner...
Hiermal ne kleine Einweiseung in X und Y vom Maker... ^^

0X - - - - - - - - - - - - - - >320X
0Y
|
|
|
|
|
|
|
|
V
240Y


So sind X und Y auf dem Bildschirm verteilt. Es ist nicht so aufgebaut wie das X,Y Koordiaten System wie in der Mathematik. X und Y starten beide oben in der linken Ecke und werden nach rechts, bzw. runter immer größer.
MfG, Oburi

Deathball
28.06.2005, 18:31
Hm, auch wenn ich mal denke das es Dhan besser erklärt hat als ich es je könnte, kann ich ja mal mein Glück versuchen...

Zu Frage 1:
Einen Radius zu machen, also einen Kreis in dem der Gegner sehen/hören/was auch immer kann, ist bei dem Maker sehr kompliziert. Deswegen benutzt man meistens keinen Kreis, sondern ein Viereck in dem der Gegner dann den Helden bemerkt. Dazu zieht man die X-Koordinate des Helden von der X-Koordinate des Gegners ab(X-Gegner - X-Held ) und nimmt davon den Betrag, d.h. wenn der Wert kleiner als 0 ist wird er mit -1 multipliziert. Der Wert der bei der Rechnung herauskommt stellt die Entfernung des Gegners zum Helden(in Kästchen) auf der X-Achse dar. Mit den Y-Werten machst du genau dasselbe, also Y-Gegner - Y-Held,gegebenenfalls dann nochmal mal -1, und du hast den Abstand des Gegner zum Helden in Kästchen auf der Y-Achse. Dann brauchst du nur noch abzufragen(mit Forks/Bedingungen) ob der Wert kleiner/gleich der gesuchten Größe ist, und du hast herausgefunden ob der Held sich in dem Viereck um den Gegner befindet, oder nicht.

Zu Frage 2:
Wenn der X-Wert des Helden kleiner als der des Gegner ist, steht der Held links von dem Gegner.
Wenn der X-Wert des Helden größer als der des Gegners ist, steht der Held rechts von dem Gegner.
Wenn die X-Werte gleich sind, stehen beide vertikal gesehen auf einer Linie.
Wenn der Y-Wert des Helden kleiner als der des Gegners ist, steht der Held über dem Gegner.
Wenn der Y-Wert des Helden größer als der des Gegners ist, dann steht der Held unter dem Gegner.
Wenn beide Y-Werte gleich sind, dann stehen beide horizontal gesehen auf einer Linie.

Bei den Forks/Bedingungen kannst du abfragen, in welche Richtung ein Event schaut. Wenn der Gegner nach links schaut, und die X-Koordinate des Helden kleiner ist als die des Gegners, wird der Gegner den Helden sehen(vorausgesetzt das Sichtfeld des Gegners ist nicht eingeschränkt).

zu Frage 3:
Tja, sehr viel mehr als Dhan kann ich dir dazu auch nciht sagen. Entweder die unsichtbaren Event, die On Hero Touch/ bei Heldberührung einen Switch aktivieren, oder eine sehr aufwendige Methode, bei der jedes Kästchen des Sichtfeldes des Gegners 3 Variablen besitzt, einen X-Wert, einen Y-Wert und die Terrain-Variable. Wenn die Terrain-Variable auf eine Terrain-ID kommt, die es dem Held ermöglicht sich dahinter zu verstecken, werden alle nachfolgenden "Sicht-Kästchen" eines X-Wertes bzw. eines Y-Wertes(abhängig von der Blickrichtung des Gegners) unwirksam.


cya
Deathball


verdammt, zu spät... dafür hab ich mehr geschrieben :p

Oburi
28.06.2005, 23:48
Muahaha... .Tja, dein Pech... :p :D :) ;) :o
Mhhh.. Deiner ist auch gut erklärt. Meins geht ja nur auf eine Frage ein: Wo steht der Held, wo der Gegner. Ich finde, man sollte mal all solche Sachen ins E-Book mitaufnehmen, eure Beschreibungen für sowas sind nähmlich nicht schlecht. Wenn man die beiden kombiniert dürfte es eigentlich net besser zu erklären sein...
Also Dr. Alzheim...
MfG, Oburi

Mr.D
29.06.2005, 15:44
2. und 3. sind klar aber kann einer mit code 1. erklären ??
Ich weiß bin ein n00b aber ich kapiers einfach nicht (für ein Quadrat)

Mfg. Mr.D 8)

Deathball
29.06.2005, 17:47
Also, nochmal von vorne und diesmal so genau und kleinschrittig wie möglich:

Der Maker beginnt seine Zählung der Kästchen wie Oburi bereits gesagt hat oben links. Im Grunde ist es also ein Koordinaten-System. Jeder Punkt in diesem System besteht aus 2 Werten, einem X-Wert und einem Y-Wert. Wenn du jetzt ein Koordinatensystem das nach genau derselben Art zählt wie der Maker zeichnest, und dort 2 Punkte markierst kannst du die X- und Y-Werte deiner Punkte genau sehen.

Zuerst kümmern wir uns um die X-Werte. Wenn du den Wert der Koordinate die den X-Wert des Helden gespeichert hat nimmst und von der Koordinate abziehst die den X-Wert des Gegner beinhaltet (also: X-Koordinate Gegner - X-Koordinate Held ) dann bekommst du den Abstand deines Helden zum Gegner. Du kannst es in deinem selbst gezeichneten Koordinaten-System nachschauen: Du erhälst den Abstand des einen Punktes zum anderen... Wenn dein Held/Punkt weiter rechts als der Gegner steht, dann wird dieser Wert zwar negativ, aber das macht nichts, da der Abstand immer noch richtig ist, nur halt negativ. Um dies zu umgehen kann man in der Mathematik einfach den Betrag des Ergebnisses nehmen (also Vorzeichen weglassen). Beim Maker baut man eine Bedingung ein, die abfragt ob das Ergebnis kleiner als 0 ist. Wenn ja nimmt man es mit -1 mal. Das ändert nichts an dem Ergebnis, hebt aber das Vorzeichen auf...

Die Y-Werte gehorchen den gleichen "Gesetzen". Auch hier kannst du die Entfernung deines Helden zum Gegner berechnen, indem du die Y-Koordinate des Helden von der des Gegners abziehst (also: Y-Koordinate Gegner - Y-Koordinate Held ), wobei die Werte auch hier negativ werden. Wieder wird ein mal -1 nichts an der Genauigkeit des Wertes ändern, wohl aber das Vorzeichen aufheben.

Jetzt da du die Entfernung kennst, kannst du abfragen ob sich der Held bereits in dem imaginären Viereck, das du um deinen Gegner gelegt hast, befindet. Wenn der "Radius" des Gegner also auf jeder Seite des Gegners 2 Felder sein soll, dann wird die erste Bedingung meistens lauten das der Abstand auf der X-Achse zwischen dem Gegner und dem Held größer als 0 sein muss. Die zweite Bedingung wird abfragen ob der Abstand auf der X-Achse kleiner/gleich 2 ist. Danach muss dasselbe mit den Y-Koordinaten gemacht werden. Die erste Bedingung wird also wieder lauten das der Abstand auf der Y-Achse zwischen den beiden nicht kleiner als 0 sein darf, aber er musss auch kleiner/gleich 2 sein. Wenn alle diese Bedingungen erfüllt sind, dann befindet sich der Held in dem imaginären Viereck, wenn eine nicht erfüllt ist sind alle weiteren Bedingungen sinnlos, weil er sich schon nicht mehr in dem Viereck befinden kann...


so, wenn du's jetzt nicht verstanden hast pack ich Paint aus - wenn du keinen Augenkrebs bekommen willst ist es glaube ich besser du sagst das du es verstanden hast ^^

cya
Deathball