Gegner erstellung, Kampfsysteme?
Übersicht

![]() |
BlasterfreundBetreff: Gegner erstellung, Kampfsysteme? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab einige fragen zum Thema Kampf und Gegner:
1.Was ist eine Ki und wie erstellt man eine?(beispiel mit verfolgenden würfel) 2.was ist pathfinding und wozu brauch ich das? 3.Wie wird über Funktionen Schaden erzeugt? 4.Wie Frage ich Attacken ab? 4.1.Speziell: wenn der verfolgende würfel im Beispiel nah an mich rankommt und mich angreift, wie wird der Angriff bei mir abgefragt und andersherum wie beim gegner wenn ich ihn angreife? Szenario: Ich habe ein Programm das als eine art kampfsimulation erstmal gilt. es hat ein Datennetz als Boden und eine technisch aussehende Skybox. ich kann mich frei bewegen es ist im Ersteperson Ansicht. Geplant: ich will das in einem Gewissen Abstand Gegner Spawnen, mich verfolgen und angreifen. ich soll selbst angreifen können, ihnen schaden und sie besiegen können. |
||
In a world without walls and fences who need gates and windows. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. KI steht für "künstliche Intelligenz" und Computergesteuerte Spieler im weiteren Sinne. Eine Simple KI könnte die Richtung zum Ziel bestimmen und sich darauf zu bewegen.
2. Nomen est Omen; Pathfinding ist die Routine, über die die KI den (günstigsten) Pfad zum Ziel bestimmt. 3. "Schaden" ist gewöhnlich auch nur eine Zahl (oder ein Wertebereich); man rechnet z.B. HP = HP - DMG und schon nehmen die Hit Points ab. 4. Was für Attacken? 4.1 Für Nahkampf wäre Kugel-Kugel Kollision am sinnvollsten - man bestimmte den Abstand Start zu Ziel und wenn der klein genug ist (kleiner als die Summe der Radien von Start und Ziel) führe man eine Aktion (z.B. Schaden berechnen) aus. |
||
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) |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
die ersten 2 themen sind ziemlich komplex. Vorallem eine sinnvolle KI zu programieren ist wirklich nicht ohne und ich bin nun einige zeit dabei, und müsste bei diesem thema schon recht schnaufen.
ich möchte jetzt nicht direkt sagen, schlag dir erstmal das mit dem Path finding und der KI aus dem Kopf, aber wenn du noch bei den basics bist, dann könnten wir dir den code auch auf chinesisch hinschreiben ![]() Wenn du mal kleinere Projekte gemachst hast, und verstehst wie ein programm/code funktoniert, dann erklären sich dinge wie Path finding und KI usw. fast von selbst. Nur so als anmerkung. Es gibt verschiedene methoden für path finding. Ich habe bis her immer den A* Algo benutzt um wege für "möchte gern KI Npcs" zu berrechnen. Diese gibts auch schon vorgefertigt und es wird schön das prinzip von Path finding erklärt. Viel Erfolg noch Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
das mit dem kreis teil wie Funktioniert das, und was wenn ich nur Angriffe in eine Richtung zulassen will und auch nur wenn eine function ausgeführt wird? | ||
In a world without walls and fences who need gates and windows. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Am besten wär's, wenn du dir ein paar Tutorials anschaust - grundlegendes Verständnis von Schleifen, Bedingungen & Funktionen solltest du dir schon selbst erarbeiten. | ||
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) |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok...
ich glaube das kann ich aber wie frage ich kollisionen ab? nicht in sinne von wie mache ich eine schleife und setze da if rein sondern mit welchem befehl konkret frage ich ab, dass dieses und jenes objekt kollidiert sind? |
||
In a world without walls and fences who need gates and windows. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
2D: recht simple Mathematik, Du vergleichst primitive Objekte (Kreis, Rechteck) und schaust anhand ihrer Koordinaten ob sie sich überschneiden. Simpelstes Beispiel ist kreis-kreis-Kollision, wenn die Summe der Radien zweier Kreise größer ist als der Abstand ihrer Mittelpunkte (Pythagoras hilft da) so kollidieren sie zwangsläufig.
3D: Hier hat b3d ein paar Befehle eingebaut, siehe OnlineHilfe. Allgemein würde ich Dir empfehlen dazu zu googlen. |
||
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 |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
thx ich such mal...
Ich hab auch mich an einer einfachen Ki versucht marke eigenbau... nun eigentlich sollte sie einen würfel dazu bringen sich auf die position des spielers auszurichten und auf ihn zu laufen... Aber er rennt weg statt mich zu verfolgen, was mach ich falsch? Code: [AUSKLAPPEN] Function follower_Ki(obj,obj2,turnrate,turnlimit,speed#)
If EntityYaw(obj) + turnlimit < Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then TurnEntity obj,0,turnrate,0 If EntityYaw(obj) - turnlimit > Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then TurnEntity obj,0,- turnrate,0 If EntityYaw(obj) - turnlimit < Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) And EntityYaw(obj) + turnlimit > Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then MoveEntity obj,speed#,0,0 End Function wo liegt der fehler? |
||
In a world without walls and fences who need gates and windows. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wer soll den darin durchsehen?
Speichere die ganzen Funktionsaufrufe zwischen und benutze aussagekräftige Variablennamen. Ein paar Kommentare was da warum erreicht werden soll wären auch hilfreich. |
||
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) |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
so nochmal mit notizen:
Code: [AUSKLAPPEN] ;funktion zur Verfolgung
Function follower_Ki(obj,obj2,turnrate,turnlimit,speed#) ;obj ist der verfolger,obj2 der verfolgte. ;turnrate bestimmt die winkelzahl um die sich der verfolger dreht. ;turnlimit bestimmt die mögliche abweichung von der ideallen winkelstellung zum verfolgtem objekt ;speed# bestimmt die geschwindigkeit mit der sich der verfolger bewegt. If EntityYaw(obj) + turnlimit < Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then TurnEntity obj,0,turnrate,0 ; fragt den winkel ab in dem das zu verfolgende objekt zum Verfolger steht ;außerdem wird ein abgleich mit der aktuellen ausrichtung des verfolgers gemacht und wenn nötig angegleicht. If EntityYaw(obj) - turnlimit > Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then TurnEntity obj,0,- turnrate,0 ;das gleiche wie über diesem programmabschnitt nur mit abfrage in die entgegengesetzte richtung. If EntityYaw(obj) - turnlimit < Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) And EntityYaw(obj) + turnlimit > Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityY (obj),EntityY (obj2)) Then MoveEntity obj,speed#,0,0 ;wenn der Verfolger anähernd in die richtung des objekt zeigt wird er nach forne bewegt. End Function hoffe ihr kommt damit besser klar. |
||
In a world without walls and fences who need gates and windows. |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
und hier noch die funktion in der funktion:
Code: [AUSKLAPPEN] Function Locate_degree_unit (x1#,x2#,y1#,y2#)
Return 1/(Sin(x1#-x2#/Sqr(((y1#-y2#)*(y1#-y2#)) + ((x2#-x1#)*(x2#-x1#))))) End Function im prinzip eine Sinusfunktion. |
||
In a world without walls and fences who need gates and windows. |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
1.: Unterlasse in Zukunft Doppelposts. Wenn du was nachreichen willst (so wie eben), kannst du den letzten Beitrag bearbeiten (dafür gibt's oben rechts an jedem deiner Beiträge den Edit-Button ![]() 2. Um die Übersichtlichkeit und Lesbarkeit deines Codes noch zu steigern, kannst du übrigens auch Code einrücken und, um uns dann daran teilhaben zu lassen, statt den code-Boxen die syntax-Boxen (über dem Eingabefeld die Schaltfläche, die mit BB beschriftet ist) verwenden. Wie das im Adventskalender vorgestellt wurde. mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Blasterfreund |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bemüh mich das nächste mal ne bisschen übersichtlicher zu sein,
damit ihr das auch lesen könnt. ![]() auf jedenfall das hab ich nicht gewusst mit dem Syntax, tut mir leid ![]() und was sagt ihr dazu was hab ich den Falsch gemacht?(jetzt mal im Programm! ![]() Ok nun hab ich daran ein bisschen gearbeitet... es funktioniert schon mal die Winkelbestimmung... aber der Würfel scheint sich weder nach mir auszurichten noch sonst irgendwie sich zu bewegen... es muss daran liegen, dass ich die if-Sätze etwas abgeändert habe... hier mal nochmal die Funktionen: BlitzBasic: [AUSKLAPPEN] Function Locate_degree_unit (x1#,x2#,y1#,y2#) diesmal mit Synthax ![]() schuldigung wenn ich nicht alles übersichtlich gestaltet habe ich bring immer erst später ordnung rein wenns funktioniert(Ja, ich weiß, dass ein ordentliches programm beim Bugfixen unglaublich hilft, aber ich habs ja noch nicht so mit der Form(noch nicht = kommt noch! ![]() |
||
In a world without walls and fences who need gates and windows. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group