verfolgen von units
Übersicht

![]() |
BaschdiBetreff: verfolgen von units |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group