verfolgen von units

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Baschdi

Betreff: verfolgen von units

BeitragMo, Dez 31, 2007 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich versuche zurzeit meinen units in einem RTS beizubringen den Feind zu verfolgen wenn er ins Sichtfeld der einheit kommt, solange bis der feind nicht mehr im sichtfeld ist (also abgehauen) oder im angriffsbereich steht und damit angegriffen werden kann. Ich hab schon dutzend sachen ausprobiert, aber es klappt nicht wirklich. Drum glaube ich, dass mein denkansatz falsch ist. Ich bitte also um neue Ideen oder codes oder ähnliches die mich weiterbringen....

dank im vorraus
mfg baschdi

p.s. wenn ihr den code oder gar das ganze spiel wollt dann lad ichs mal eben hoch ..ihr müsst es nur sagen
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden
 

Dreamora

BeitragMo, Dez 31, 2007 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Präsentiere uns bitte deinen Denkansatz, dann können wir dir Tipps geben wie du ihn anpassen kannst oder was du anders machen könntest.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Baschdi

BeitragMo, Dez 31, 2007 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
k....
also hab mir gedachtich frag ab ob das opfer im sichtfeld ist. wenn ja dann wird deren koos gespeichert beim angreifer dann wird gefragt ob die einheit in reichweite ist ..wenn ja sollte er angreifen (was ich noch nicht geproggt habe) wenn nicht dann soll er verfolgen also mach ich pathfinding mit den gespeicherten ziel koos ...
(das ist nur die aktuellste weise wie ichs versucht habe)
Code: [AUSKLAPPEN]


If a\action=3 Then:   
   If a\FolX<>o\xx And a\FolY<>o\yy And o\xx<a\xx+a\sicht*tile And o\xx>a\xx-a\sicht*tile And o\yy<a\yy+a\sicht*tile And o\yy>a\yy-a\sicht*tile And a\team<>o\team Then:
      
      o\verfolgen=1:a\verfolger=1
      a\FolX=o\xx:a\FolY=o\yy
      ;o\verfolgen=1 And a\verfolger=1 And
      If a\FolX=o\xx And a\FolY=o\yy Then:
         If o\xx<a\xx+a\reich*tile And o\xx>a\xx-a\reich*tile And o\yy<a\yy+a\reich*tile And o\yy>a\yy-a\reich*tile And a\team<>o\team Then:
            Text u\x,u\y,"angreifen "+u\FolX+"/"+u\FolY
         Else:   
            Text u\x,u\y,"verfolgen "+u\FolX+"/"+u\FolY
         a\action=1
         a\xEnd=a\FolX
         a\yEnd=a\FolY
         pathfinding(a\xx/tile,a\yy/tile,a\xEnd/tile,a\yEnd/tile):a\FightStep=PfadSpliner()
         Bsize=BankSize(PfadBank)
         ResizeBank(a\uPfad,Bsize)
         CopyBank PfadBank, 0, a\uPfad, 0, Bsize                                 
         EndIf
      EndIf    
         
   EndIf
EndIf   

The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden
 

Dreamora

BeitragMo, Dez 31, 2007 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was funktioniert genau nicht?

Es wäre der lesbarkeit des Codes hilfreich, wenn du von der nutzung von : absehen würdest.
1 Befehl pro Zeile ist ausreichend und führt meist auch dazu, dass man fehler noch sieht.

Bei Then brauchts übrigens kein :


was mir an deinem Ansatz fehlt ist das er wirklich einen bereich überprüft. Du testest gegen 1 Tile ... kann mir nicht vorstellen, dass das so gedacht ist. Da müsstest du dann mit einer Loop alle Felder überprüfen die im Sichtbereich sind.

Aber vielleicht übersehe ich da auch eine finesse deines Ansatzes.


Wovon ich aber abraten würde sind die ganzen Fields für "Verfolgen" etc.
Da würde ich eine Zustandsvariable nehmen (->Finite State Machine), die je nach wert Verfolgen, Angreifen, Verteidigen, Fliehen, Patrolieren etc bedeutet.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Baschdi

BeitragMo, Dez 31, 2007 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
also das mit dem Then: mach ich so weils früher mal nicht ging! Aber um so besser wenns jetzt geht.

Aber ich habe doch mit
Code: [AUSKLAPPEN]

If a\FolX<>o\xx And a\FolY<>o\yy And o\xx<a\xx+a\sicht*tile And o\xx>a\xx-a\sicht*tile And o\yy<a\yy+a\sicht*tile And o\yy>a\yy-a\sicht*tile And a\team<>o\team Then   


überprüft welcher o im Bereich des a steht. Dann ist es unnötig jeden teil einzeln abzufragen. (glaube ich)
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden
 

Dreamora

BeitragMo, Dez 31, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
naja kommt draufan was a\sicht * tile bedeutet.

wenn du ein tile basierendes system hast dann musst du jedes Tile einzeln überprüfen.

dein test da bringt nur was, wenn du sowas wie sichtweite prinzipiell machst und nicht tiles.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Baschdi

BeitragDo, Jan 03, 2008 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...
a\sicht ist die sichtweite in felder z.b. 2 dann 2*32=64. Dann wird überprüft ob der Gegner sich innerhalb dieses Vireecks befindet. das geht bestimmt auch anders, aber so mach ich das schon immer und es klappt.
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden
 

Dreamora

BeitragDo, Jan 03, 2008 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist natürlich auch ne möglichkeit wenn du nicht mit Sichtkegel und so arbeitest, klar. Daran hatte ich garnet gedacht.

In einem Tilesystem ist das Tile um Tile prüfen darum einfacher weil der Gegner nur auf den Tiles sein kann und es ist simpler (in deinem bsp zb) 2x2 tiles anzusehen ob sie besetzt sind als es ist 64x64 pixel auf kollision oder sonstwas zu prüfen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Baschdi

BeitragDo, Jan 03, 2008 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt ...also is es schneller wenn ich die Tiles überprüfe

aber dafür mus ich ja extra 2 Schleifen dazu machen...
Code: [AUSKLAPPEN]

For x=0 To mapX
For y=0 To mapY
[...]
Next
Next


gibt das nicht wieder Probleme mit der fps?

übrigens hat meine variante den Nachteil, dass der Sichtbereich ein Viereck ist keinn Kreis
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group