![]() |
Re: Counter Strike in 2D
Wahrscheinlichkeitsrechnung ist meine Schwachstelle :lol:
|
Re: Counter Strike in 2D
du hast doch für die spieler die positions angaben.
jetzt machst du z.b. sowas
Delphi-Quellcode:
so änlich würde ich das lösen*G*
function GetFeindlichGegener:Integer;
begin for i:=0 to Gegener.count-1 do begin if (Gegener[i].x - player.x <= 200) and (Gegener[i].y - player.y <= 200) then begin if Genger[i].feindlich = True then begin result:=i; break; end; end; end; end; evtl. müste man ein rechteck ziehen |
Re: Counter Strike in 2D
nö gibts nicht. array mit for-schleife durchgehen und relative position bestimmen. fertig aus.
hab mimis post noch nicht gesehen gehabt, aber so ungefähr könnte es gehen. |
Re: Counter Strike in 2D
Hi mimi,
es wär aber besser, Gegner im Umkreis von z.B. 500 Pixel zu finden: Ich nehme jetzt einfach an, dass Player[0] der PC-Spieler ist, und der Rest KI-Spieler.
Delphi-Quellcode:
Hier werden nur Spieler überprüft, die nicht im Team des PC-Spielers sind. Die if-Abfrage berechnet den Abstand zwischen den Spielern, und vergleicht ihn mit dem maximalen Abstand (Umkreis). Dieser muss quadriert werden, außer du willst die Wurzel des linken Teils des Vergleichs ziehen. Hier fehlt allerdings noch eine Überprüfung, ob ein Objekt im Weg ist. Das wird schon etwas komplizierter.
for i := 1 to Players.Count-1 do
begin if Players[0].Team <> Players[i].Team then begin if Sqr(Players[0].Position.X-Players[i].Position.X)+Sqr(Players[0].Position.Y-Players[i].Position.Y) > Sqr(Umkreis) then //Gegner markieren end; end; Greetz alcaeus |
Re: Counter Strike in 2D
hey, es gibt leute, die können diagonal weiter schauen, als geradeaus ;)
|
Re: Counter Strike in 2D
Ich habe einst (vor vielen Jahren) mal ein ähnliches Spiel mit DelphiX gemacht.
Und bin dabei noch einen Schritt weiter gegangen indem ich versuchte hören und sehen in 2D umzusetzen. Jeder kann nur Truppen in einen bestimmten Sichtfeld sehen, es sei denn sie sind sehr laut dann wurden sie halb durchsichtig gezeichnet. Die Freund-Feind Erkennung lief so das alle Objekte in einem gewissen Umkreis gesucht wurden. Dann erfolgte die Prüfung ob sie im Sichtfeld lagen, falls nicht ob sie hörbar sind. Sollten sie sichtbar sein wurden zusätzlich noch alle anderen Objekte auf ihren Abstand zur Verbindungslinie zwischen eigenen Spieler und dem Feind/Freund überprüft. War dieser Abstand kleiner als die Größe des Objektes - Größe des Freund/Feindes dann wurde er verdeckt (klingt ganz schön kniffelig :wink: ) Ob das Gegenüber dann auch tatsächlich identifiziert werden konnte wurde dann ganz simpel über den Abstand bestimmt. Für alle die sich eines meiner Machwerke mal reinziehen möchten: ![]() |
Re: Counter Strike in 2D
@Ben1: Hab mir dein Spiel noch nicht angesehen, hört sich aber logisch an, auch von den anderen.
Das Prob. ist, ich weiß nicht was ich mit der for-Schleife durchgehen soll. Ich hab mal was versucht, hat aber nicht geklappt:
Delphi-Quellcode:
for I := 0 to DXSpriteEngine.Engine.Items.Count-1
Zitat:
Alle Spieler gehören der Klasse TCSPlayer an. Sie werden nur am Team (TTeam = (TeamCT, TeamT)) unterschieden. (Und sie haben ein blaues bzw. rotes Sprite, das wird anhand von Team zugewiesen). Erstellen TUE ich sie folgender Maßen:
Delphi-Quellcode:
Welches Array muss ich abgehen?
var
NewTeam: TTeam; constructor TCSPlayer.Create(AOwner: TSprite); begin inherited; HP := 100; if Team = TeamCT then begin Image := Game.Pics.Items.Find('Blau'); //Game ist mein Haupt-Formular Width := Game.Pics.Items.Find('Blau').Width; Height := Game.Pics.Items.Find('Blau').Height; X := Random(Game.DXWelt.Width div 3); Y := Random(Game.DXWelt.Height-Height); end else begin Image := Game.Pics.Items.Find('Rot'); Width := Game.Pics.Items.Find('Rot').Width; Height := Game.Pics.Items.Find('Rot').Height; X := Game.DXWelt.Width-Width-Random(Game.DXWelt.Width div 3); Y := Random(Game.DXWelt.Height-Height); end; end; procedure StartGame(ACTCount, ATCount: Integer); var I: integer; begin for I := 1 to ACTCount do begin NewTeam := TeamCT; with TCSPlayer.Create(Game.DXEngine.Engine) do begin end; end; for I := 1 to ATCount do begin NewTeam := TeamT; with TCSPlayer.Create(Game.DXEngine.Engine) do begin end; end; end; |
Re: Counter Strike in 2D
Ich hatte meine Daten unabhängig von DelphiX organisiert. In einer Liste bzw. in vielen Listen. Die Karte war Quadranten eingeteilt von denen jeder einer Liste mit Objekten enthielt die sich dort befanden. Zusätzlich war jedes Objekt noch in einer zweiten Liste registriert die sämtliche Spielobjekte enthielt. Ich brauchte also nur berechnen welche Quadranten betroffen waren und deren Objektlisten durchgehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz