Abfragen welche Entity dem Player am nahesten ist
Übersicht

sonicfireBetreff: Abfragen welche Entity dem Player am nahesten ist |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo allerseits!
Ich versuche gerade für einen kleinen EGO-Shooter eine Abfrage einzubauen. Das soll folgendermaßen aussehen. (cutdown:) Ich habe eine PlayerEntity, mit der Space-Taste "schießt" sie rote Böbbels. Die roten Böbbel visieren automatisch eine Gegner-Entity an (mittels PointEntity, was ausgezeichnet klappt). Schön und gut, die Böbbels fliegen zum Gegner und zerplatzen. Aber nun zu meiner eigentlichen Frage: Wenn ich jetzt (sagen wir 10) Gegner habe, die im Level verstreut sind, und ich es so haben möchte, das mein Held automatisch den Gegner "anpeilt" (abschießt, quasi) der ihm am nächsten ist - wie würde ich das realisieren? Spiele gerade mit EntityPick rum, aber das will ncoh nicht so ganz funktionieren, da ich mir nicht ganz sicher bin, wie ich diese Funktion anzuwenden habe. EntitiyPickMode usw habe ich für die Gegner gesetzt. Ein bisschen Code noch obendrauf: (Aktion, wenn ich Space-Taste drücke) Code: [AUSKLAPPEN] Function CreateBullet() newb.Bullet = New Bullet newb\timeout# = 100 newb\entity = CopyEntity(bullet_sprite) RotateEntity newb\entity, 0,EntityYaw(ent_player)-180,0 PositionEntity newb\entity,EntityX(ent_player),EntityY(ent_player),EntityZ(ent_player) PointEntity newb\entity, EntityPick(newb\entity,10) ; das liefert mir nur "Entity does not exist" zurück End Function Hoffentlich hab ich mich klar ausgedrückt! ![]() Danke! |
||
~sonic |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallöchen. Also den Gegner mit kürzester Distanz zum Spieler kannst Du ermitteln, wenn Du alle Gegner mit EntityDistance abcheckst. Zusätzlich kannst Du noch LinePick mit einbeziehen, damit nur der Gegner mit kürzester Distanz, der auch vom Spieler sichtbar ist, angegriffen wird. ![]() |
||
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi sonicfire,
bei entityPick ist es wichtig das die Entity's auch mit "EntityType" versehen werden da sie sonst nicht gepickt werden können. Weiterhin könntest du versuchen den Pickradius (derzeit ja auf 10) drastisch zu erhöhen. |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, vielen dank erstmal! Werde das mal ausprobieren und schauen, wie weit ich komme! ![]() EDIT: Seufz ... öhm.... also... hach, verdammt! Warum gibts in BB3D nicht solche schönen Befehle wie "EntityNearest"? Hach ![]() Habe das nochmal mit größeren Radien versucht. Pickwerte sind ebenfalls gesetzt... immer nur ein "Entity does not exist" ... sehr merkwürdig ![]() |
||
~sonic |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Muss nochmal eine Frage obendrauf setzen! ![]() Wie sieht denn grundsätzlich die Verwenundg von EntityPick aus? Und: Ich soll ja am besten via EntityDistance alle Entities abfragen. Gut, klingt logisch - aber wie? Ich weiss doch vorher noch gar nicth wieviele Entities es geben wird und welche usw ? |
||
~sonic |
![]() |
BlitzGames |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ich weiss doch vorher noch gar nicth wieviele Entities es geben wird und welche usw ?
Das solltest Du aber wissen.. Bau doch 'n Zähler ein. |
||
www.blitzcase.com
www.anpfiff-spiel.de www.fernsehtycoon.de |
sonicfire |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Klar, aber umständlicher gehts ja wohl nicht. Ich denke EntityPick ist das, was man dazu verwenden kann? Frage mich nur warum mir EntityPick immer nur "Entity does not exist" zurückliefert ![]() |
||
~sonic |
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
mach doch erstmal einen definitiven Test. Erstelle eine Testscene mit nur dem Player und einem Gegner. Positioniere den Gegner per Zufall. Dann mittels EntityDistance mal abfragen wie weit der Gegner Enfernt ist. EntityPick Radius auf diesen Wert setzen. Fehlerquellen in deinem Programm könnten u.a. sein das du eine sehr große Skalierung verwendest und der Radius deshalb nicht ausreicht. Vielleicht verwendest du Pivot's die nicht im Zentrum des Mesh liegen für Gegner oder Player. Welcher Art sind die Gegner (b3d ,MD2, X)? Lassen die sich überhaupt "Pickbar" einstellen? Etwas Code wäre hielfreich um dir zu helfen. Grundsätzlich sollte EntityPick tatsächlich (und ohne vorher EntityDistance zu verwenden) die richtige Methode sein. Aber erst musst du klären warum sie nicht gepickt werden. Ist bestimmt wieder was banales. ![]() |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
sonicfire hat Folgendes geschrieben: Warum gibts in BB3D nicht solche schönen Befehle wie "EntityNearest"?
damit du selber noch was zu tun hast ![]() schreib doch ne Function namens "NearestEntity"... könnte so aussehen: Code: [AUSKLAPPEN] Function NearestEntity(objekt_von_dem_der_Abstand_ausgeht$)
For ki = 1 To KI_Anzahl dist(ki) = EntityDistance(ki\obj, Objekt_von_dem_der_abstand_ausgeht$) Next ... oder irgendwie sowas. du könntest in einem Dim, die Distance Daten deiner KI´s speichern (das dim müsste dann bei 50 KI´s 50 Felder haben, usw...), und dann den kleinsten raussuchen... |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group