Probleme mit Kollisionsabfrage und Angriff
Übersicht

Ronon_DexBetreff: Probleme mit Kollisionsabfrage und Angriff |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Community,
Ich habe gerade ein kleines Problemchen. Ich habe ein Spielfeld in dem Rechts der Gegner ist und links ich. Das Ziel ist es den Gegner zu zerstören, das Problem dabei ist, das sich die Einheiten ja auch gegenseitig auf dem Spielfeld bekämpfen sollen. Im Moment hab ich das nicht gerade gut gelöst, denn ich stehe ziehmlich auf dem Schlauch und weis nicht genau wie ich es hin bekomme, das die Einheiten stehen bleiben, sich bekämpfen und dann erst weiter laufen. Zweites, ich weis nicht wie das Delay zwischen den Angriffen machen soll, also dass nur jede Sekunde einmal angegriffen wird, aber für jede Einheit die Zeit Individuell abläuft. Hier ist der Code (Funktionsfähig), die benötigten dateien lade ich bei Rapidshare hoch (nur spartanische Bilder ![]() BlitzBasic: [AUSKLAPPEN] AppTitle "Gen Wars" https://www.blitzforum.de/upload/file.php?id=11678 /7Edit Forums Archiv Link mfg Ronon_Dex |
||
- Zuletzt bearbeitet von Ronon_Dex am Di, Mai 01, 2012 20:03, insgesamt einmal bearbeitet
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Speichere einfach zu jeder Einheit, ob sie kämpft und ggf. gegen wen. Dann kannst du stets überprüfen, ob die Einheit bewegt werden soll oder nicht. Genaueres kann ich dir leider nicht sagen, da ich keine Lust habe, deinen Code nach den relevanten Teilen zu durchsuchen.
2. https://www.blitzforum.de/foru...hp?t=34436 Zudem solltest du Bilder einmal laden; am besten vor der Hauptschleife. Du kannst sie schließlich mehrmals zeichnen. ZEVS |
||
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zu 1. das habe ich schonmal versucht nur ich hatte das Problem, das entweder alle anhielten auch wenn sie nicht in der nähe waren, oder sie nicht mehr weiter liefen, oder das sie zum ersten liefen und dann nurnoch die Gegner weiter gingen.
Zu 2. Das war schon hilfreicher ![]() ![]() //Edit: Hier der Teil in dem die einzelnen States der Einheiten abgefragt werden: BlitzBasic: [AUSKLAPPEN] Function UpdateGame() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die wenigsten mögen Filehoster wie Rapidshare- benutz doch das Archiv hier im Portal für die Bilderchen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde die Types gegner und defender (umbenennen; ja, aber darauf will ich nicht hinaus) mit einem Field fightWith.defender bzw. fightWith.gegner versehen und darauf achten, dass diese Felder immer direkt aufeinander zeigen. Dann musst du nur noch alle gegner auf Kollision mit allen defendern prüfen und die Verbindung aufbauen. Praktischerweise wird der Kampf sofort beendet, wenn einer stirbt, da er dann mit Delete![]() ![]() Diese Vorgehensweise bietet sich aber nur für Kämpfe zwischen zwei Einheiten an. Wenn mehr Einheiten involviert sind, wird das Ganze wohl ein bisschen komplizierter. Eine Alternative, die von letzterem Einwand nicht betroffen ist, besteht darin, zunächst einfach bei jeder Einheit zu prüfen, ob ein Gegner (defender) in Reichweite ist. Sollte dies so sein, wird nicht vorgerückt und, wenn zu dem noch die Möglichkeit eines Angriffes besteht, angegriffen werden. Dies kann bei vielen Einheiten allerdings die Performance drücken (hier wird bei jedem Frame ein Angriffsziel gesucht, während oben dies wesentlich seltener geschieht). ZEVS |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum hast du gegner und defender mit den exakt gleichen Feldern? Spezialfälle wie "Beim Turm" würde ich so auch nicht unbedingt einbauen; Spezielle Objekte auf der Karte sollten auch als Types realisiert werden. Was ich nicht gesehen habe, ist eine Variable, die die aktionen Steuert. Sowas wie Kämpfen, Vorrücken, Flüchten...
Das Zeichnen von Bild und Leben würde ich auch aus dem Block heraus ziehen; das muss nur einmal da stehen, wenn nichts dagegen spricht. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe die ganzen SteuerVars in das Type gepackt, damit ich jede Einheit einzeln ansprechen kann und bei defender werden noch andere Fields dazu kommen ![]() der Turm wird das einzige bleiben was einzeln "daneben" steht deswegen hab ich es einfach so stehen lassen. Gibt es nicht eine möglichkeit beide darauf zu prüfen ob sie 10 Koordinaten entfernt von einem Gegner sind und dann bleiben sie stehen und bekämpfen sich ? Das wäre doch das einfachste oder nicht ? ..Upload im ersten Post durch Forum Archiv ersetzt |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ja das geringste Problem. Viel Spaß mit Herrn Pythagoras!
Nimm ZEVS' tipp an, und speicher den Gegner direkt in einem Feld. Das wird so vieles einfacher machen. (Angreifer und Verteidiger würde ich auch in einem Allgemeinem Typ haben, sie sind ja nahezu identisch.) |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich komme gerade nicht ganz mit was ZEVS genau meint.
Die Types sind zwar noch identisch aber es kommen noch verschiedene dinge bei beiden rein aber soweit bin ich noch nicht jetz sollte erstmal das Kampfsystem funktionieren |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine weitere Möglichkeit wäre es einen Blindlayer zu verwenden! Also eine Art Mask für die Objekte. Zum Beispiel einen Kreis der halt eine bestimmte Größe hat, dieser Kreis bewegt sich mit dem Objekt mit und wenn nun ein GegnerObjekt diesen Kreis berührt so kannst du dann die Aktionsvariablen setzen. Entweder Flucht, Angriff oder sonstwas.
Dieser Blindlayer ist aber unsichtbar zu machen oder wie eben Xeres schon sagte Pythagoras. Ich habe diese Technik damals vom GameEditor Click & Play abgeschaut und bei einem Jump'n Run Game nachprogrammiert. Eine feine Sache! Du kannst auch Linien verwenden als Bereichsmarker. Wenn sich da zB. ein Gegner links und rechts bewegt, vor einem Tor oder was und der Spieler sich im Bereich der Linie bewegt (Spieler kollidiert mit Linie = Aktion ausführen), so soll ihm der Gegner folgen. Ist ein simples Prinzip! lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zunächst neues Type-Design:
BlitzBasic: [AUSKLAPPEN] Type player Dann eine Überprüfung: BlitzBasic: [AUSKLAPPEN] Function CheckFights() Letzte Funktion einfach über Satz des Pythagoras. Dann weißt du praktischerweise, wer gerade mit wem kämpft und musst diese Leute halt stehen lassen. Was dir zu tun bleibt? Folgendes: - Die Funktion UnitsCollide musst gefüllt werden - Obige Funktion muss integriert werden - Die Felder müssen überprüft werden - Können mehrere gegner gegen einen defender (und umgekehrt) kämpfen? ZEVS |
||
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habe das jetz von dir eingebaut und es Funktioniert perfekt, jedoch hab ich etwas entfernt ->
BlitzBasic: [AUSKLAPPEN]
wird es da iergendwann Probleme geben ? Also getestet habe ich es mit mehreren Angreifern und Defendern Vielen Dank euch ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...warum? Jetzt wird der Teil ausgeführt, ob es nötig ist oder nicht. Und du kannst auch nicht mehr überprüfen, ob es ein valides Ziel gibt. Und du kannst die Einheiten nicht auf mehrere Ziele verteilen... Du hast nur Vorteile, wenn du ziele speicherst... | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das Stimmt nicht, als die Abfragen drin waren, wurde immer nur ein Ziel angegriffen.
erst nach dem entfernen der abfragen griff es mehrere Ziele an ... Moment, den Teil den ich gepostet habe, hab ich nicht komplett gelöscht ![]() ![]() So wie es oben in meinem Beitrag steht hab ich es in meinem Code nun. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group