PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kolisionsabfrage mit hindernissen



Schrödinger
01.05.2006, 18:49
die sach ist die,

ich plane ein kampfsystem "ähnlich" dem von vagrant story .. und finde keine lösung für folgendes problem :

wenn man den gegner anvisiert soll abgefragt werden ob etwas dem abgefeuerten schuss im wege steht, oder ob der gegner überhaupt getroffen werden kann (weil er um ne ecke steht oder so .. )
sprich beim drücken der entertaste werden alle gegner auf dem spielfeld markiert, dann wählt man den den man angreifen möchte. hier soll dann abgefragt werden ob es überhaupt möglich ist dem gegner schaden zuzufügen ..
is schwer zu umschreiben .. ich poste noch mal n screen wenn wir was besseres einfällt ..

da das ganze nicht nur horizontal/vertikal funktionieren soll sonder beliebig, komm ich auf keinen nenner ..

falls jemand nen tipp hat wäre ich überaus dankbar -- grüß ich

Lil_Lucy
01.05.2006, 18:56
Hmmm, ich hatte mal sowas gemacht, da hatte ich aber den Hero als Corsor verwendet.

Ich habe dazu ein Event auf die Ausgangsposition gelegt, die Entfernung zum Ziel in Schritten brechtnet (den direkten Weg) und dann per "step toward Hero" das Event mit maximaler Geschwindigkeit auf den Helden zubewegt, und zwar genau so oft wie ich Schritte berechnet hatte. Wenn die Schritte aufgebraucht waren habe ich verglichen ob die Positionen von Event und Ziel übereinstimmen. Wenn nicht musste es irgendwo hängen geblieben sein, ergo: keine Schusslinie!

Venoran
01.05.2006, 21:04
die sach ist die,

ich plane ein kampfsystem "ähnlich" dem von vagrant story .. und finde keine lösung für folgendes problem :

wenn man den gegner anvisiert soll abgefragt werden ob etwas dem abgefeuerten schuss im wege steht, oder ob der gegner überhaupt getroffen werden kann (weil er um ne ecke steht oder so .. )
sprich beim drücken der entertaste werden alle gegner auf dem spielfeld markiert, dann wählt man den den man angreifen möchte. hier soll dann abgefragt werden ob es überhaupt möglich ist dem gegner schaden zuzufügen ..
is schwer zu umschreiben .. ich poste noch mal n screen wenn wir was besseres einfällt ..

da das ganze nicht nur horizontal/vertikal funktionieren soll sonder beliebig, komm ich auf keinen nenner ..

falls jemand nen tipp hat wäre ich überaus dankbar -- grüß ich

Wenn ich dich richtig verstanden habe, hab ich hier ne Lösung für dich. Du erstellst ein unsichtbares Event mit der höchsten Geschwindigkeit.
Wenn du jetzt Enter drückst schießt das unsichtbare Event voraus.
Wenn es unterwegs unterbrochen wird, gibt es Rückmeldung und du kannst daraus schließen, dass es ein Hinderniss gibt.
Dieses Event kannst du in alle Richtungen schicken (auch in verschiedene nacheinander), solange du ein ChangeSwitch als Movebefehl am Ende hast und die Abfrage der gesamte Move-Befehl länger dauert als deine Abfrage.

Beispiel: Du willst checken, ob ein Event dir nach OBEN im Weg steht. Du drückst Enter. Darauf schießt das usnichtbare Event los (mit dem Move-Befehl: Up, Up, Up, Up, Up, Up, UP, Up, Switch ON XXXX; Ignore if it cant move), gleichzeitig lässt du ein Paralell-Event laufen, dass bevor dein Event den letzten Befehl mit dem Switch ON erreichen würde (d. h. beim letzten Up), dein Event ausschalten wird (musst du die Zeit errechnen bzw. ausprobieren).
In der Praxis: Das Event führt die UPs hintereinander aus, und wenn es irgendwo gegenstößt werden alle Befehle übersprungen, die nicht ausgeführt werden können (die restlichen UPs) und der Switch wird aktiviert.
Wenn das Event nicht unterbrochen wird, wird dein unsichtbares Event bevor es den Switch erreicht vorher ausgeschaltet (mit dem Paralell-Event).
D. h. Switch ON = Hinderniss, Switch OFF = kein Hinderniss.

Hoffe, ich konnte dir weiterhelfen :D

Edit: Das ist keine Theorie, diese Methode benutze ich seit meiner 3. KI-Generation und hat sich gut bewährt.

Caine Luveno
02.05.2006, 15:16
Da das auch um die Ecke funktionieren soll ist die Variante den Hero zu verwenden vielleicht sogar besser.

Ich würde es folgendermaßen machen:

-Das igentliche Hero-Event (welches per StepTowardsHero von Events angelaufen werden) teleportierst du an die Position des fraglichen Ziels.

-Dann nimmst du ein unsichtbares Event mit höchster Geschwindigkeit und lässt es per StepTowardsHero von der Heldenposition im KS zum Heroevent laufen.

-Vor jedem Schritt des Events speicherst du die Koordinaten in zwei Variablen z.B. TestEventXVorBewegung und TestEventYVorBewegung

-Das selbe machst du nach jede Bewegung mit den Variablen TestEventXNachBewegung und TestEventYNachBewegung

-Danach fragst du ab ob TestEventXVorBewegung = TestEventXNachBewegung und TestEventYVorBewegung = TestEventYNachBewegung ist

-Wenn ja ist das Event irgendwo hängen geblieben. wenn nein hat es einen Schritt weiter gemacht.

-Dann muss noch ledeglich abgefragt werden ob das Event das gewünschte Ziel erreicht hat. Selbiges Verfahren wie oben bloß mit den Koordinaten des Helden Events. Schaltest einen switch auf on und kannst das dann dementsprechend prüfen. die bewegung des unsichtbaren events machst du am besten in einer schleife die unterbrochen wird sobald das event irgendwo hängt oder sein ziel erreicht hat. so ist die anzahl der schritte für jeden möglichen fall der bewegung ausreichend. es sei denn du willst waffen mit begrenzter reichweite benutzen.


So funktioniert es jedenfalls bei mir in meinem ATB-KS beim Einsatz eines Bogens oder einer Armbrust.