Gegner KI
Übersicht

DayfBetreff: Gegner KI |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo allerseits
Ich versuche gerade ansatzweise einen egoshooter zu broggn. Mit der Umwelt und der Steuerung bin ich zufrieden. Jedoch habe ich keine Ahnung wie ich mit der Gegner KI beginnen soll. 1.gipt es ein ausführliches tutorial ? 2.wie kann ich es realisieren, dass ich einen Gegner zehn mal kopiere und aufs terrain stelle und sich alle zehn bewegen, nich nur einer? ... mit types? wenn ja wie? 3.Wenn die kamera in den radius eines gegners kommt soll dieser sich der kamera zuwenden. OK das währe vielleicht schon mal ein Anfang Vielen Dank im Voraus...... ![]() |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 1. ja es gibt sehr viele gute tutorials...ich würd mir an deiner stelle erstmal pathfinding angucken ( findste auf www.blitzbase.de) und dann sehen wir weiter...
zu 2. ja das geht mit types...guck dir mal in der OH den befehl each an damit geht das zu 3. das weiss ich nicht genau aber das müßte mit atan2 gehen... |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Hellfront |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde ungefähr so rangehen:
-erstmal würd ich gucken, dass die Gegner sich von alleine bewegen also so wie du es dir vorstellst: evtl. -eine Zufällige Taktik - Bewegung komplett zufällig - suchen den gegner Was auch immer - dann würd ich gucken dass sie Schießen, sobald der Gegner in reichweite ist. -Da es keine "Monstergegner" werden sollten eine kleine Reaktionszeit einbauen usw. so nimmt deine KI langsam Form an und wird immer besser |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
@5k41 Das A*Pathfinding ist für einen Ego-Shooter eher ungeignet... ![]() |
||
Dayf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antworten
fange jetzt mal an mich mit dem komlexen Thema zu befassen habe aber gerade noch ein Problemchen.... ich habe Bäume per Zufall auf mein hügeliges terrain gesetzt, der Versuch die y-Position aller Bäume mit Hilfe von Types auf TerrainY()-1 zu setztn schlug fehl. Was habe ich falsch gemacht?(is bestimmtn Anfängerfehler) Code: [AUSKLAPPEN] Type tree Field xxx# Field yyy# End Type For dr=1 To 100 c(i).tree = New tree c(i)\xt# =Rnd(50,400) c(i)\yt# =Rnd(50,400) Next For c(i).tree Each tree PositionEntity c(i),xt#,TerrainY()-1,yt# Next |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaub einfach das (i) hinter jedem c ist sinnlos wenn du das weg nimmst sollte es funktionieren... | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Dante |
![]() Antworten mit Zitat ![]() |
---|---|---|
glaub ehr das statt "i" da "dr" hin muss ![]() sonst ist ja die for schleife sinnlos ![]() Edit: Versuchs vielleicht mal so: Code: [AUSKLAPPEN] Type tree
Field xxx# Field yyy# End Type For dr=1 To 100 c.tree = New tree c\xxx# = Rnd(50,400) c\yyy# = Rnd(50,400) Next For c.tree = Each tree PositionEntity c,xxx#,TerrainY()-1,yyy# Next |
||
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] For dr=1 To 100 c(i).tree = New tree c(i)\xt# =Rnd(50,400) c(i)\yt# =Rnd(50,400) Next Es könnte sein das zwei ober mehr Bäume an der gleichen Position stehen. Ich würde erst mal über prüfen ob schon an der glechen Position ein Baum steht. |
||
TACITUS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nee, das mit der Position ist egal
Es können so viele Bäume ineinander stehen wie se wollen ![]() Bad-Rat's Antwort war richtig nur der Code war falsch (Klammern vergessen) edit: ah, code war nicht falsch, war eine weitere möglichkeit ups So muss es sein: Code: [AUSKLAPPEN] For dr=1 To 100 c(dr).tree = New tree c(dr)\xt# =Rnd(50,400) c(dr)\yt# =Rnd(50,400) Next ![]() edit: hm, du hast die feldvariable c doch vereinbart, oder? ![]() |
||
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image |
Dayf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke
ich habe nochmal probiert, aber bin meinem Ziel nicht näher gekommen Komme einfach nicht auf den Fehler...das kann doch nicht so schwer sein ![]() habe den code ein wenig geändert: Code: [AUSKLAPPEN] Global tree = LoadMesh("C:\tree2.b3d") Type baueig Field xpt# Field zpt# Field neigung# Field skaleX# Field skaleY# Field skaleZ# End Type Global tree.baueig For bai=0 To 100 tree(bai).baueig = New baueig tree(bai)\xpt# = Rnd(50,400) tree(bai)\zpt# = Rnd(50,400) tree(bai)\neigung# = Rnd(-20,180) tree(bai)\skaleX# = .2 tree(bai)\skaleY# = .2 tree(bai)\skaleZ# = .2 Next For tree.baueig Each baueig PositionEntity tree,xpt#,TerrainY()-1,zpt# RotateEntity tree,0,neigung#,0 ScaleEntity tree,skaleX#,skaleY#,skaleZ# Next Es kommt immer der Hinweis "Expecting Next".... Wie dem auch sei.... ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tree ist schlicht und einfach kein Array!
Und bei der zweiten schleife fehlt ein = |
||
Antsan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit dem Array lässt sich ganz einfach lösen:
[syntax="bb"] Dim tree(100) For i=1 To 100 tree(i)= LoadMesh("C:\tree2.b3d") next Type baueig Field xpt# Field zpt# Field neigung# Field skaleX# Field skaleY# Field skaleZ# End Type Global tree.baueig For bai=0 To 100 tree(bai).baueig = New baueig tree(bai)\xpt# = Rnd(50,400) tree(bai)\zpt# = Rnd(50,400) tree(bai)\neigung# = Rnd(-20,180) tree(bai)\skaleX# = .2 tree(bai)\skaleY# = .2 tree(bai)\skaleZ# = .2 Next For tree.baueig Each baueig PositionEntity tree,xpt#,TerrainY()-1,zpt# RotateEntity tree,0,neigung#,0 ScaleEntity tree,skaleX#,skaleY#,skaleZ# Next[/syntax] Ich hab leider kaum Ahnung von Types, also weiß ich nicht, welche Fehler sich da vielleicht verstecken... |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ähm, wenn überhaupt:
Code: [AUSKLAPPEN] Dim tree.baueig(100)
Das sagt mir meine Logik für OOP, ka ob die im alten BB funzt, |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
5k41 hat Folgendes geschrieben: zu 1. ja es gibt sehr viele gute tutorials...ich würd mir an deiner stelle erstmal pathfinding angucken ( findste auf www.blitzbase.de) und dann sehen wir weiter...
hm, ich hab mir das mal angeguckt, un d bin überrascht, wie gut das funktioniert, aber, ist diese methode schnell genug, um bei einem Spiel vielen gegnerischen Bots ihre intelligenz zu spenden??? Bei mir hat eine berechnug ungefär 4 ms gebraucht, ist das net zu viel???? |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
wurde oben von Ava schon gesacht...dachte das reicht aber ok dann brauch ma wohl wirklich noch was ausgereifteres... | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ava bezog sich dabei aber eher darauf, dass das pathfindung für 2d spiele gemacht wurde, nicht au die geschwindigkeit, oder??? | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
TACITUS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
An dem Code ist meiner Meinung nach ziemlich viel falsch, ich würde es
so machen: [syntax="bb"] Global Baum = LoadMesh("C:\tree2.b3d") Type baueig field Mesh Field xpt# Field zpt# Field neigung# Field skaleX# Field skaleY# Field skaleZ# End Type Global tree.baueig For I = 1 To 100 ;100 Baums tree.baueig = New baueig tree\xpt# = Rnd(50,400) tree\zpt# = Rnd(50,400) tree\neigung# = Rnd(-20,180) tree\skaleX# = .2 tree\skaleY# = .2 tree\skaleZ# = .2 tree\Mesh = Baum Next For tree.baueig = Each baueig ;Hier hast bei allen Variablen vergessen ; tree\ davor zu setzen PositionEntity tree\Mesh,tree\xpt#,TerrainY()-1,tree\zpt# RotateEntity tree\Mesh,0,tree\neigung#,0 ScaleEntity tree\Mesh,tree\skaleX#,tree\skaleY#,tree\skaleZ# Next [/syntax] Versuchs jetzt mal, kann sein, dass jetz noch mehr falsch ist... ![]() |
||
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image |
Dayf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal Danke
Der Weg von TACTICUS funktioniert soweit Die Bäume stehen nun... jedoch nicht auf dem terrain, denn bei Code: [AUSKLAPPEN] positionentity tree\mesh,tree\xpt#,terrainY(terrain)-1,tree\zpt#
erscheint im debug:"not enough parameters" nun will ich versuchen alle Bäume von einer gewissen Position auf das terrain fallen zu lassen, was jedoch bei schrägen nicht gut aussieht. Hat jemand noch eine Idee..? ![]() |
||
Dayf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sry... TACITUS ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 3. Ich mach sowas mit der phytagoräischen Formel:
[syntax="bb"]xentfernt = gegner\x - spieler\x yentfernt = gegner\y - spieler\y if xentfernt < 0 then xentfernt = -xentfernt if yentfernt < 0 then yentfernt = -yentfernt gesammteweitequadrat = xentfernt^2 + yentfernt^2 gesammtweite = gesammteweitequadrat^0.5 if gesammtweite < x then pointentity gegner, kamera[/syntax] gesammtweite...Entfernung des Gegners zur Kamera x...Sichtradius |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group