Abfragen welche Entity dem Player am nahesten ist

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

sonicfire

Betreff: Abfragen welche Entity dem Player am nahesten ist

BeitragMo, Feb 27, 2006 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Embarassed Wenn etwas unklar ist, bitte einfach fragen!

Danke!
~sonic
 

Ava

Gast

BeitragMo, Feb 27, 2006 21:25
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. Cool

Bob

BeitragMo, Feb 27, 2006 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 28, 2006 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, vielen dank erstmal! Werde das mal ausprobieren und schauen, wie weit ich komme! Wink

EDIT: Seufz ... öhm.... also... hach, verdammt! Warum gibts in BB3D nicht solche schönen Befehle wie "EntityNearest"? Hach Smile Das vermisse ich. Aber eigtl. müsste doch EntityPick genau dies tun?

Habe das nochmal mit größeren Radien versucht. Pickwerte sind ebenfalls gesetzt... immer nur ein "Entity does not exist" ... sehr merkwürdig Confused
~sonic
 

sonicfire

BeitragDi, Feb 28, 2006 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss nochmal eine Frage obendrauf setzen! Wink

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

BeitragDi, Feb 28, 2006 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 28, 2006 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Confused
~sonic

Bob

BeitragMi, März 01, 2006 0:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

Black Spider

BeitragMi, März 01, 2006 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
sonicfire hat Folgendes geschrieben:
Warum gibts in BB3D nicht solche schönen Befehle wie "EntityNearest"?


damit du selber noch was zu tun hast Wink

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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group