G
Gregorius
Gast
Hallo,
Ich habe mir vorgenommen ein ganz simples jedoch graphisches rundenbasiertes Kampfsystem zu schreiben. Damit ihr euch vorstellen könnt was ich damit meine, hier einige links:
Splendid Genesis (http://www.dark-matter-soft.de/index.php?site=splendidg/beschreibung&nz=1) ist eigentlich genau das was ich machen will. Natürlich ist es schon sehr ausgereift. Von der Komplexität soll es ungefähr so sein wie das Video: http://youtube.com/watch?v=TNOMQDinBg8&feature=related
Den prinzipiellen Aufbau eines rundenbasierten RPG Kampfsystemes finde ich relativ einfach:
Quelle: http://www.spheredev.org/wiki/Battle_System_Tutorial_by_NeoLogiX
Jedoch habe ich ein grundsätzliches Problem (ich benutze das XNA Gamestudio aber das Problem würde auch bei JAva 2d Engines auftreten). Wenn ich dieses Kampfsystem als Conosolenapp programmieren (http://www.freewebs.com/campelmxna/tutorials.htm) würde, wäre alles okay, denn da gibt es keine Animationen der Charaktere und Wartezeiten zwischen den Angriffen.
Wenn es aber graphisch wird gibt es ja immer dieses Modell, dass es eine Art Update- und eine Drawfunktion gibt die in einer Schleife ausgeführt werden.
Ich will zum Beispiel programmieren:
Wenn ich dieses aber in die Update(oder Draw)Methode schreibe, dann stoppt die Updatemethode ja nicht solange bis die Angriffsanimation zu ende ist und setzt dann mit der MonsterAngriffsanimation fort. Es wird also z.B. die AngreiferAngriffsanimation ausgeführt und danach sofort die Monster.Angriffsanimation und danach wird sofort das leben abgezogen und das wird millionenmal wiederholt solange das Spiel läuft.
Wenn ich nun leere Schleifen einbaue, habe ich zwar diese Pausenzeiten, nur kann nichts geupdatet oder gezeichnet werden, sodass ich gar keine Animationen sehe.
So könnte man das bei Verge(http://www.verge-rpg.com/docs/view.php?libid=3§ion=138) machen. Aber das ist irgendwie auch nicht die Lösung.
Also ich hoffe ihr habt mein grundsätzliches Problem verstanden.
Meine Frage also: Wenn ich also diese Update und Drawschleifen habe, wie muss ich an die Sache rangehen um prinzipiell ein Kampfsystem wie dieses hinzubekommen: http://youtube.com/watch?v=TNOMQDinBg8&feature=related ?
Ich habe mir vorgenommen ein ganz simples jedoch graphisches rundenbasiertes Kampfsystem zu schreiben. Damit ihr euch vorstellen könnt was ich damit meine, hier einige links:
Splendid Genesis (http://www.dark-matter-soft.de/index.php?site=splendidg/beschreibung&nz=1) ist eigentlich genau das was ich machen will. Natürlich ist es schon sehr ausgereift. Von der Komplexität soll es ungefähr so sein wie das Video: http://youtube.com/watch?v=TNOMQDinBg8&feature=related
Den prinzipiellen Aufbau eines rundenbasierten RPG Kampfsystemes finde ich relativ einfach:
Code:
BATTLE:
* initialize battle & combatant vars
* start timer
* MAIN LOOP:
o blit bg & under-elements
o blit combatants & main elements
o draw displays & over-elements
o FlipScreen()
o HANDLE EVENTS:
process turn queue (do action of who's up next)
process new events (if enemy's ready, have "AI" determine next action & add them to the queue; if player's ready, bring up menu & process menu action)
process constant events (update the readygauge, update the counter for any effects like glowing or death sentence, update the timer, etc)
END HANDLE EVENTS
o HANDLE COMBATANTS:
process actions
process status changes
END HANDLE COMBATANTS
o check for battle end conditions
o if conditions are not met, continue
o else END MAIN LOOP
* stop timer
* resolve battle's end (give out spoils if won, else handle battle lost/game overs)
* reset battle info (heal enemies, remove temporary statuses, reset timers, etc)
* END BATTLE
Jedoch habe ich ein grundsätzliches Problem (ich benutze das XNA Gamestudio aber das Problem würde auch bei JAva 2d Engines auftreten). Wenn ich dieses Kampfsystem als Conosolenapp programmieren (http://www.freewebs.com/campelmxna/tutorials.htm) würde, wäre alles okay, denn da gibt es keine Animationen der Charaktere und Wartezeiten zwischen den Angriffen.
Wenn es aber graphisch wird gibt es ja immer dieses Modell, dass es eine Art Update- und eine Drawfunktion gibt die in einer Schleife ausgeführt werden.
Code:
Init() //graphicken laden, music
Loop()
{
Update() //Spielelogik
Draw() //Animationen abspielen...
}
Code:
KampfrundeBeginn(Angreifer, Monster)
Angreifer.Angriffsanimation
Wenn die Animation zu ende ist
Monster.Angriffsanimation
Wenn die Animation zu ende ist
Monster.leben -= Angreifer.stärke
KampfrundeEnde
Wenn ich dieses aber in die Update(oder Draw)Methode schreibe, dann stoppt die Updatemethode ja nicht solange bis die Angriffsanimation zu ende ist und setzt dann mit der MonsterAngriffsanimation fort. Es wird also z.B. die AngreiferAngriffsanimation ausgeführt und danach sofort die Monster.Angriffsanimation und danach wird sofort das leben abgezogen und das wird millionenmal wiederholt solange das Spiel läuft.
Code:
Loop(Solange Monster und Angreifer noch leben)
KampfrundeBeginn(Angreifer, Monster)
Angreifer.Angriffsanimation
Loop(Solange 2 Sekunden nicht vorbei)
{
}
Monster.Angriffsanimation
Loop(Solange 2 Sekunden nicht vorbei)
{
}
Monster.leben -= Angreifer.stärke
KampfrundeEnde
LoopEnde
Wenn ich nun leere Schleifen einbaue, habe ich zwar diese Pausenzeiten, nur kann nichts geupdatet oder gezeichnet werden, sodass ich gar keine Animationen sehe.
Code:
Loop(Solange Monster und Angreifer noch leben)
KampfrundeBeginn(Angreifer, Monster)
Loop(Solange 2 Sekunden nicht vorbei)
{
Angreifer.Angriffsanimation
Render
}
Loop(Solange 2 Sekunden nicht vorbei)
{
Monster.Angriffsanimation
Render
}
Monster.leben -= Angreifer.stärke
KampfrundeEnde
LoopEnde
So könnte man das bei Verge(http://www.verge-rpg.com/docs/view.php?libid=3§ion=138) machen. Aber das ist irgendwie auch nicht die Lösung.
Also ich hoffe ihr habt mein grundsätzliches Problem verstanden.
Meine Frage also: Wenn ich also diese Update und Drawschleifen habe, wie muss ich an die Sache rangehen um prinzipiell ein Kampfsystem wie dieses hinzubekommen: http://youtube.com/watch?v=TNOMQDinBg8&feature=related ?