Gegner bewegen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

dreamfile

Betreff: Gegner bewegen

BeitragMo, Jan 05, 2004 2:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wies ich bin neu aber ich finde im Netz nichts mehr, die meisten
Handbücher sind für 2 D und ich habe keinen Schimmer wie ich einen
Gegner durch die Gegend laufen lasse.

Bitte helft mir - Danke

Grüschen Sascha
Der Neue

Xenon

BeitragMo, Jan 05, 2004 2:25
Antworten mit Zitat
Benutzer-Profile anzeigen
such dir ein gutes KI Tutorial auf www.robiste.de

den KI sachen kann man, vorrausgesetzt, man hat ein Hirn und kann Programmieren ganz leicht von 2D auf 3D übertragen
 

@uzingLG

BeitragMo, Jan 05, 2004 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir mal die Befehle PositionEntity, MoveEntity, RotateEntity und TurnEntity in der Referenz an.
 

dreamfile

BeitragMo, Jan 05, 2004 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.robiste.de/ is dead.
Der Neue
 

dreamfile

BeitragMo, Jan 05, 2004 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@uzingLG

Danke schon mal, ich habe mit diesen Befehlen auch schon viel probiert aber irgendwie bewegt sich nichts. Könnte jemand so nett sein und mir
eine Bewegung mit einem .3ds schreiben zb. das es eine oval oder kreis abfährt besser wäre ein viereck das abgefahren wird. das .3ds ersetzte ich dann gegen meins. möchte nur ein kleines erfolkserlebniss mit dem ich weitermachen kann.

Danke schon mal

Grüschen Sascha
Der Neue

Master C

BeitragMo, Jan 05, 2004 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
dreamfile hat Folgendes geschrieben:
http://www.robiste.de/ is dead.


Könnte daran liegen, dass es "robsite" und nicht "robiste" heißen muss Laughing

Jan_

Ehemaliger Admin

BeitragDi, Jan 06, 2004 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.robsite.de

das mit der KI ist nicht so einfach!
hier mal ein ausschnitt:

Code: [AUSKLAPPEN]

Function UpdateEnemy( pl,anz )

If    player(pl,0) > 0 Then
   ;muffe=Player(pl,6)
   
   m=0
   dis =0
   
   If Wachsam < 0 Then wachsam = 0
   If Wachsam > 480 Then wachsam = 480
   player(pl,5)=player(pl,5)-1
   weapons(pl,0,1) = weapons(pl,0,1)- 1
   
   ;-----------Spieler in sicht---------------------
   dis=EntityDistance#  (player(pl,0), player(0,0))
   If dis < Gegnerklassenwerte(3,Player(pl,6)) + (Wachsam/Gegnerklassenwerte(4,Player(pl,6)))
      m=EntityVisible (player(0,0),player(pl,0))
   End If
   
   ;------------Waypointauswahl---------------------
   
   
   If EntityDistance#  (player(pl,0), flag(pl,player(pl,4),3)) <15 Then player(pl,4)=player(pl,4)+1
   If player(pl,4)>flagvariable(pl) Then player(pl,4)=0
   

   

   ;-----------Drehen und schießen------------------   
   If m >0 Or player(pl,5) > 0 Then
      gs = DeltaYaw# (player(pl,0), player(0,0))
      If gs > Gegnerklassenwerte(5,Player(pl,6))+(Wachsam/Gegnerklassenwerte(6,Player(pl,6))) And gs < (360-Gegnerklassenwerte(5,Player(pl,6)))-(Wachsam/Player(pl,6)) Then letztfetz=1
      If letztfetz >0 ;Or player(pl,5) < 1 Then
      
         gs = DeltaYaw# (player(pl,0), flag(pl,player(pl,4),3))
         ;angriff = 0
      Else
         If m>0 Then
            Wachsam=Wachsam+(m*3)
            If player(pl,5) < Gegnerklassenwerte(10,Player(pl,6)) Then player(pl,5) = Gegnerklassenwerte(10,Player(pl,6))
            
            gsz=Botbewegungsrichtung+Player(pl,10)
            If gsz < 250 Then
               gsz=gsz+Gegnerklassenoptionen#(6,Player(pl,6))
               If gsz> 250 Then gsz = 250
            End If
            If gsz > 250 Then
               gsz=gsz-Gegnerklassenoptionen#(6,Player(pl,6))
               If gsz< 250 Then gsz = 250
            End If
            berechnet=(gsz-250)/100
            
            If berechnet = 0 Then
         
               AnimateMD2 player(pl,1),1,0.15,40,46,1
               If weapons(pl,0,1)<1 Then
                  If weapons(pl,0,1)<0 Then weapons(pl,0,1)=0
                  weapons(pl,0,1) = weapons(pl,0,1)+ 6
                  
                  CreateBullet(pl,anz)
               End If
            End If
         End If
      End If
      
   Else
      gs = DeltaYaw# (player(pl,0), flag(pl,player(pl,4),3))
   End If
   ;--------Drehungsredius beschränken--------------
   
   
   If gs > Gegnerklassenwerte(9,Player(pl,6)) Then gs=Gegnerklassenwerte(9,Player(pl,6))
   If gs < -Gegnerklassenwerte(9,Player(pl,6)) Then gs=-Gegnerklassenwerte(9,Player(pl,6))
   
   ;----------Bewegungen, die immer ausgeführt werden
   GraueZelle=EntityY(player(pl,0))
   z=(Gegnerklassenoptionen#(5,Player(pl,6))*player(pl,9))
   If GraueZelle - player(pl,8) = z Then
      player(pl,9)=player(pl,9)+Gegnerklassenoptionen#(8,Player(pl,6))
      z=(Gegnerklassenoptionen#(5,Player(pl,6))*player(pl,9))
   Else
      player(pl,9)=1
   End If
   player(pl,8)=GraueZelle
   
   TranslateEntity player(pl,0),0,-z,0
   TurnEntity player(pl,0),0,gs,0
   ;---------Laufen---------------------------------
   
   
   If m=0 Then
      MoveEntity player(pl,0),0,0,Gegnerklassenoptionen#(0,Player(pl,6))
      TranslateEntity player(pl,0),0,Gegnerklassenoptionen#(5,Player(pl,6))-0.03,0
   Else
      If player(pl,5) > 0
         ;ausweich = 0
         
         If schussgeloest>0 Then
            gsz=Botbewegungsrichtung+Player(pl,10)
            If gsz < 250 Then
               gsz=gsz+Gegnerklassenoptionen#(6,Player(pl,6))
               If gsz> 250 Then gsz = 250
            End If
            If gsz > 250 Then
               gsz=gsz-Gegnerklassenoptionen#(6,Player(pl,6))
               If gsz< 250 Then gsz = 250
            End If
            berechnet=(gsz-250)/100
            berechnet =berechnet * Gegnerklassenoptionen#(2,Player(pl,6))
            If berechnet > Gegnerklassenoptionen#(6,Player(pl,6)) Then berechnet = Gegnerklassenoptionen#(6,Player(pl,6))
            If berechnet < -Gegnerklassenoptionen#(6,Player(pl,6)) Then berechnet = -Gegnerklassenoptionen#(6,Player(pl,6))

            ;If dis > 50 Then
            MoveEntity player(pl,0),berechnet,0,0
            ;End If
         Else
            If weapons(pl,0,1)<1 Then
            
               If dis > Gegnerklassenwerte(8,Player(pl,6)) Then MoveEntity player(pl,0),0,0,Gegnerklassenoptionen#(1,Player(pl,6))
            End If
         ;End If
      End If
      If weapons(pl,0,1)<1 Then
         If dis < 20 Then MoveEntity player(pl,0),0,0,Gegnerklassenoptionen#(1,Player(pl,6))
      End If
      Else
         MoveEntity player(pl,0),0,0,Gegnerklassenoptionen#(0,Player(pl,6))
         
      End If
   End If
   ;------------------------------------------------

   
End If


End Function

between angels and insects
 

dreamfile

BeitragDi, Jan 06, 2004 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
DANKE Jan_

ich war schon am verzweifeln, habe gestern das Buch:
"Spiele programmieren mit Blitz Basic" von Markt & Technik
gekauft und noch bis 4 Uhr morgens drangesessen. Leider
ist das meiste (brauchbare) aus dem Buch wiedermal für 2D
geschrieben. Habe jetzt aus dem Kopf schon eigene Befehle zusammen
gestellt und es läuft auch recht gut. Der Nebel vor den Collisionsbefehlen
lichtet sich auch langsam. Laughing
Mit den Bewegungen dachte ich an eine vorgegeben Stecke die der Gegner abfährt. Es soll ein Rennspiel werden.
Ich schau mal auf der HP http://www.robsite.de

Danke für deine Hilfe,

grüschen Sascha
Der Neue

Jan_

Ehemaliger Admin

BeitragDi, Jan 06, 2004 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Achtung:

Auf Waypoint ausrichten,
wenn distanz kleiner als 10 ist dann auf nächsten waypoint ausrichten!
Ansonsten die Bewegungen global machen,
und genau die gleiche möglichkeiten und beschränkungen wie der Player bei bedarf erläutere ich details noch genauer, aber probiere erstmal damit es hinzukriegen!
between angels and insects
 

INpac

BeitragDi, Jan 06, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
(hab mir deinen code nicht ganz durchgelesen)
Egoshooter-KI sollte aber auch selbstständig einen Weg finden können, oder eben Waypoints setzen können, zB an die letzte stelle, wo ein KI-Objekt den Player sah. So kann man 2 Modi einbauen: 2D-Pathfinding, also X- und Z-Dimension, und 3D-Waypointabsuche.

Aber: ich muss sagen, KI ist wirklich nicht einfach, ich code ja auch schon länger an der Mentira-KI, und hossa, gar nicht so leicht.

Jan_

Ehemaliger Admin

BeitragDi, Jan 06, 2004 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Yup inpac, ist ein ausschnitt!

KL, macht: läuft waypoints ab, bis der Player ins SICHTFELD kommt, greift ihn an (zulaufen, schießen, ausweichen)
wenn gegner weg, laufen noch bis zum letzten sichtpuinkt, wenn nicht in neuer sicht, laufen zum Waypoints zurück!

das sichtfeld erweitert sich, je aufmerksamer sie sind, welches durch schüße usw. geändert wird!

Das gehört aber nicht in diese Topic!
between angels and insects
 

dreamfile

BeitragMi, Jan 07, 2004 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

wau danke für den Tip mit den Waypoints, leider habe ich mal wieder keinen Schimmer und war schon soooo stolz drauf meinen Gegener
auf einer vorgegebenen Bahn fahren zu lassen. Es wird kein Shooter
sondern soll ein Raceboat Spiel werden und es würde ein PC Gegner
langen der schwer zu überholen ist. Ich habe den Code gerade in ein anderes Tread geschrieben aber hier nochmal meine Lösung die mir jetzt nicht mehr so toll vorkommt Embarassed
Code: [AUSKLAPPEN]
;ANIMATION BEWEGUNG

TurnEntity cube,0,0,0
RotateEntity cube,0,0,0
PositionEntity cube,284,1,454
SetAnimKey cube,0

RotateEntity cube,0,0,0
TurnEntity cube,0,-90,0
PositionEntity cube,314,1,484
SetAnimKey cube,10

RotateEntity cube,0,0,0
TurnEntity cube,0,-90,0
PositionEntity cube,454,1,484
SetAnimKey cube,20

RotateEntity cube,0,0,0
TurnEntity cube,0,-180,0
PositionEntity cube,484,1,454
SetAnimKey cube,30

RotateEntity cube,0,0,0
TurnEntity cube,0,-180,0
PositionEntity cube,484,1,314
SetAnimKey cube,40

RotateEntity cube,0,0,0
TurnEntity cube,0,-270,0
PositionEntity cube,454,1,254
SetAnimKey cube,50

RotateEntity cube,0,0,0
TurnEntity cube,0,-270,0
PositionEntity cube,314,1,254
SetAnimKey cube,60

RotateEntity cube,0,0,0
TurnEntity cube,0,-360,0
PositionEntity cube,254,1,314
SetAnimKey cube,70

RotateEntity cube,0,0,0
TurnEntity cube,0,-360,0
PositionEntity cube,284,1,454
SetAnimKey cube,80
AddAnimSeq cube,80
Animate cube,1


Ich werde mal nach diesen Waypoints schauen. Danke noch mal.


Grüschen Sascha
Der Neue

Jan_

Ehemaliger Admin

BeitragMi, Jan 07, 2004 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
AktuellerPunkt = 0

anzahl=5

Dim Waypoints(Anzahl)

for s= 0 to 5
Waypoints(s)=createcube()
PositionEntity Waypoints(s),Rand(-128,128),1,Rand(-128,128)
next
repeat
Wenn Aktueller punkt in mit deltayaw/pitch nicht null dann drehen
wenn distanz < 10 then aktueller punkt = aktueller punkt+1
if aktuellerpunkt > anzahl then aktuellepunkt=0

beschleunigen!
until keyhit(1)

Achtung nicht ausfürbar!
between angels and insects
 

dreamfile

BeitragMi, Jan 07, 2004 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm

Das heist -128,128 = 0 ?
Ne vergiss es da steige ich noch nicht durch,
danke für deine unermüdliche Hilfe.

Grüschen Sascha
Der Neue

Jan_

Ehemaliger Admin

BeitragMi, Jan 07, 2004 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Rand = Randomizer = Zufallszahl im Bereich zwichen -128 und 128

nur zur erkläung mal genommen!
between angels and insects
 

INpac

BeitragMi, Jan 07, 2004 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
da noch ein paar tipps:
1) Wenn die Waypoints alle auf 1 Ebene (Y-Wert gleich) liegen, musst du nicht EntityDistance() anwenden, sondern kannst (wenn auch nur minimal) Speed schonen, in dem du die Entfernung 2D ausrechnest, mit hilfe des Satzes des Pythagoras:

Abstand=SQR((X1-X2)^2+(Z1-Z2)^2)

2) Waypoints müssen nicht mit Polygonobjekten erstellt werden, ist ja klar. Hier bei einem Würfel werden ja pro Cube 12 neue Polygone erstellt. Nimm lieber Pivots - die auch "Nullobjekte" genannt werden können

3) Um ein weiches Ausrichten zum nächsten Waypoint zu erhalten kannste einfach immer schrieben:
TurnEntity dein_KI_Entity,0,DeltaYaw( dein_KI_Entity,nächster_Waypoint)/5,0
Je größer der Divisionsfaktor (wie auch immer der genannt wird..), desto träger dreht sich das Objekt zum Ziel.

Jan_

Ehemaliger Admin

BeitragMi, Jan 07, 2004 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
[BesserwisserPart]
Yo, aber wenn du es zum 1. Mal hinbekommen möchtest, und wie man liest du ja nicht solange progst, dann nehme doch Cubes, damit du auch siehst, wo sie sind!

Natürlich Später würden Cubes sich sehr schlecht machen!
Aber man muss ja nur 1nen Befehl ändern.
[/BesserwisserPart]
[StolzverteidigungsPart]
@INpac, ich glaube keum, das es was nützt, wenn du ihn jetzt sowas schon erkläst, wenn er -128,128=0 fragt!
Das wäre wie wenn ich Julz erkläre, wie man Die KI mit dem VIS-Verbindet!
[/StolzverteidigungsPart]

Es ist Nichts Böse gemeint!
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group