Sichtfeld bei KI
Übersicht

ke^kxBetreff: Sichtfeld bei KI |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich arbeite gerade an einer KI. Sie soll aber nur Informationen über den Spieler erhalten, wenn dieser vor ihr ist. Dafür habe ich folgenden Code geschrieben:
BlitzBasic: [AUSKLAPPEN]
Vorne beim Bild ist oben. So kann ich schonmal einschränken, was die KI "sieht". Aber man soll sich ja auch hinter Gegenständen verstecken können. Das wollte ich mit einem änlichen Code machen, aber ich benötige dafür ja zusätzlich die Breite des Objekts aus der Sicht der KI (eigentlich ist es für 3D). Wie kann ich diese herausfinden? Oder gibt es eine komplett andere Lösungsmöglichkeit (vorallem ein Ansatz). Danke schonmal im Vorraus, Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, ich hab nen sehr miesen lösungsansatz...
du könntest raycasting benutzen, also von der gegnerposition per for-schleife ein paar (unsichtbare) strahlen aussenden und schauen mit was die kollidieren ... wenn du direkt vor dem gegner stehst kollidieren sie mit dir, wenn du hinter irgendeiner mauer stehst dann kollidieren sie mit der mauer und treffen dich nicht ... dann bist du versteckt. das geht bei 2d noch einigermaßen schnell, bei 3d weiß ich nichs, da ja die dritte dimension auch noch abgefragt werden muß ... erhöht sich also um ein vielfaches und bei vielen gegnern.... aua. mies, aber mir fällt nix besseres ein. |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab ich mir schon überlegt, aber das verbraucht schon bei einer KI in 2D enorm viel Rechenzeit, weil diese Strahlen ja immer um höchstens einen Pixel verlängert werden dürfen.
Danke trotzdem, das du darüber nachgedacht hast, Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab von 3d keine ahnung, versuche mich da gerade reinzufinden und ein partikelsystem an mein mesh zu pappen, geht irgendwie nich. aber ich bin über das entityinview gestolpert... wenn du für den gegner ne camera kreierst... weiß nich ob das geht... aber dann könnte man das abfragen... denke ich mal. weiß aber auch nich genau... | ||
A Cray is the only computer that runs an endless loop in less than four hours. |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, so könnte es gehen. Ich probiers mal aus. Aber auch das ist leider sehr umständlich, da ich alle Objekte in einem Dim-Feld speichern müsste.
Wen jemanden noch eine andere Lösungsansatz parat hat, trotzdem bitte posten. Danke @Alfadur, Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verstehe das Problem nicht ganz. Nimm doch Types. ![]() BlitzBasic: [AUSKLAPPEN]
So kannst du wunderbar alle Gegner verwalten, und fragst einfach ab, ob sie dich sehen. Dann kannst du sogar noch Sachen wie Waffen, Energie und Spezialeffekt hinzufügen. LordChaos |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit sinus und cosinus. Dann kannste mit AND in einer IF anweisung nen bereich eingrenzen. Ist schneller als jeden punkt durchzugehen. | ||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@LordChaos:
Witzbold, ich müsste die Meshes in dims oder Types speichern und das würde den Zugriff nicht gerade erleichtern. Außerdem speichere ich diese ganzen Daten sowieso schon in Dim-Feldern (macht ja keinen unterschied zu Types). @Lord_Vader: Den Bereich habe ich ja bereits eingegrenzt, mir fehlt ja eigentlich nur die Breite des im weg stehenden objektes. Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wirf ein pivot oder aehnliches von dem spieler zu der box und zaehle ab! | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, als Ansatz (allerdings vor allem für 2D):
Voraussetzung: eine idealerweise als Dim gespreicherte karte mit den hindernissen (sprich: ne tilekarte). Nun lässt du ein a*-Pathfinding von Ki zu dir stattfinden, unterscheidet es sich auch nur in einem Schritt vom direkten Weg ist ein Hindernis vorhanden. der zeitaufwand hält sich noch einigermassen in Grenzen, v.a. wenn ja nur innerhalb der Sichtweite geprüft werden musst und du a+ und Vergleich in eine Routine baust, also abgebrochen wird sobald das erste Hindernis erkannt wird. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Lord_Vader:
Wie meinst du dass, welche Box? Und wie kann ich das Abzählen? (Tut mir Leid, dass ich heute etwas schwer von Verstand bin, komme gerade aus dem Urlaub zurück^^) @Bladerunner: Ja, so köntte es gehen. Aber das funktioniert in 3D leider nur, wenn man auf Boden steht, denn sonst hat man übelste Probleme (3D a-Pathfinding^^) Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
o_O Wenn du keine Types benutzt, wie willst du sonst alle benötigeten Sachen speichrn. Bei Dims hast du immer den Nachteil der festen Begrenzung und ohne ist es ja praktisch unmöglich.
Und sonst ist es ja noch wichtig zu wissen, ob es nun 2D oder 3D sein soll. Euer Endprodukt wäre ja eh 3dimensional, also lohnt es sich nicht, würde ich sagen, jetzt eine komplizierte 2D-Lösung zu schreiben wenn Blitz eh schon alles parat hat. ![]() LordChaos |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie hat Blitz diese Lösung denn parat? Ich bin immer noch nicht ganz zurück^^
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na es gab doch dieses EntityInView. Du erstellst für eine Camera und prüfst dann für jeden Gegner ob sie den Spieler sehen. Danach kannst du die Cam wieder löschen. Ich denke, so zeitaufwenig ist das nicht. Wenn eine Camera aber wirklich nur so 16 Bytes wegnimmt (wahrscheinlich entity_id, entity_x, entity_y und entity_z), kannst du sie auch gleich eingepspeichert lassen.
Also sowas: BlitzBasic: [AUSKLAPPEN]
Das ist jetzt natürlich nur so pie mal Daumen geschrieben, wie gesagt, benutze kein B3D. LordChaos |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Besser wärs aber mit DeltaYaw und DeltaPitch (http://www.blitzbase.de/befehle3d/deltapitch.htm, http://www.blitzbase.de/befehle3d/deltayaw.htm)
edit: Hier beträgt das sichtfeld 45° BlitzBasic: [AUSKLAPPEN] If Abs(DeltaYaw(enemy,player))<45 And Abs(DeltaPitch(enemy,player))<45 |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@LordChaos:
Ja, so mach ich es jetzt. Danke für deine Geduld^^ @YellowRider: Das würde aber auch wieder nur das grundsätzliche Sichtfeld festlegen. Auch hier fehlt mir wieder die breite der Hindernisse. Danke trotzdem, so werde es wahrscheinlich im äußersten Bereich des Sichtfeldes machen, da die KI dafür weniger Informationen bekommen soll (aus dem Augenwinkel halt). Danke nochmal an alle, die hier gepostet haben, Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
- Zuletzt bearbeitet von ke^kx am Fr, März 25, 2005 12:57, insgesamt 2-mal bearbeitet
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jiriki hat Folgendes geschrieben: @LordChaos:@Wunderkind:
Das würde aber auch wieder nur das grundsätzliche Sichtfeld festlegen. Auch hier fehlt mir wieder die breite der Hindernisse. Danke trotzdem, so werde es wahrscheinlich im äußersten Bereich des Sichtfeldes machen, da die KI dafür weniger Informationen bekommen soll (aus dem Augenwinkel halt). Was habe ich gesagt? Und wo? |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry, habe mich natürlich geirrt^^
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group