PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VX Ace] Endloses Standardkampfsystem



Sölf
08.01.2013, 02:38
So, guten Tag. Folgendes Problem im VX Ace:

Ich wollte mich mal an einer Art, nennen wir es, "Tower Defense" versuchen. Man kann in einem Dungeon Monster zur Verteidigung platzieren, ist man fertig fängt der "Level" an und ein Event in Form eines Heldens/Abenteurers/Whatever rennt durch das Dungeon einer festen Route folgend. Trifft dieser Held auf ein Monster (sprich, stimmen die Koordinaten der beiden Events überein) kommts zu einem Kampf im Standard Kampfsystem. Man spielt nun das Monster und muss soviel Schaden anrichten wie möglich um den Helden mit allen Monstern die man platziert hat schlussendlich zu besiegen. Das funktioniert soweit auch, außer es tritt folgender Fall ein:

Der Spieler platziert 2 Monster direkt hinternander, also so, dass die beiden Events aneinander angrenzen. Läuft unser Held nun in den ersten Gegner ist noch alles normal, läuft er aber in den zweiten hört das Standard Kampfsystem nicht mehr auf. Wenn ich den Helden besiege gewinne ich, und gewinne nochmal, und gewinne nochmal, und gewinne nochmal - und habe eine Endlosschleife. Wenn ich verliere verliere ich wieder und wieder und wieder - und bin auch in einer Endlosschleife. Das Komische daran ist halt, dass der Kampf nicht neugestartet wird, ich sehe nichtmal die Map zwischendurch.

Das alles läuft nur über Events und Common Events, ich habe an Ruby noch gar nix gemacht, nichtmal Texte übersetzt.

Zu Hülf? xD

Hier ist ein Download zum Projekt, was eben bisher wirklich nur ein Test war.

http://dl.dropbox.com/u/57720060/Dungeon%20Lord.rar

caesa_andy
08.01.2013, 13:07
Ich habe mir das mal angesehen und ich bin etwas verwirrt, warum du das so kompliziert machst.
Wozu die Koordinatenabfrage? Wenn ich das richtig sehe, ist doch ohnehin der Gegner in wirklichkeit der Spielercharakter. Das bedeutet, du kannst statt der Koordinatenabfrage einfach jeden Gegner auf "Player Touch" setzen und das Kampf-Event dann über das Monster-Event aufrufen, statt über ein paralleles Common-Event.

Den Fehler, der in deinem Event zu eben diesem merkwürdigen verhalten führt, sehe ich aber leider auch nicht.

Sölf
08.01.2013, 13:30
Ich hab das Mittlerweile auch so gelöst wie du vorgeschlagen hast. Der Ablauf war aber ursprünglich so:

Die Monster auf der Map sind Events. Ein weiteres Event in Form eines Helden läuft durch das Dungeon. Der Spieler läuft unsichtbar die selbe Route ab wie das Helden Event einzig und allein damit die Kamera auch richtig folgt. Problem daran war, da alles auf Through gestellt war ist das Helden Event lustig weitermarschiert während der Spieler und entsprechend die Kamera immer weiter hinterherhing, wenn die Kämpfe durch den Spieler ausgelöst wurden.

Wie gesagt, jetzt gibts nur noch die Monster und den Spieler, welcher die Grafik des Helden bekommt. Laut einem Post in nem VX Forum liegt das mit den Kämpfen aber wohl an der sehr kurzen Wartezeit von nur einem Frame. Naja, das Problem hat sich ja somit erstmal erledigt. Trotzdem Danke dafür. xD

Marche Radiuju
08.01.2013, 20:51
Zwar ist das Problem bereits gelöst bzw. wurde umgangen, aber rein aus Interesse hatte ich mir das Projekt auch noch mal angeschaut (heute Morgen hatte ich leider noch keine Möglichkeit dazu). Mir scheint, das Problem ist aus der ungünstigen Konstellation zwischen Koordinatenabfrage und Bewegungsbefehl entstanden.

Die Koordinatenabfrage deshalb, weil sie ununterbrochen (abgesehen von 1 Frame zwischendurch) die Koordinaten der Monster (und nebenbei mit einem separaten Event auch noch die des Helden) checkt. Leichter zu kontrollieren wäre dieses Event gewesen, wenn es nur die Koordinaten abfragt, sobald sich das Held-Event bewegt. Theoretisch hätte es sogar gereicht, wenn die Koordinaten von den Monstern nur einmal abgefragt werden: nämlich in dem Moment, als die Monster platziert werden. Danach bewegen die sich ja ohnehin nicht mehr.

Der Bewegungsbefehl, der dem Held-Event die Route zuweist, wäre zudem leichter für die Koordinatenabfrage zu handhaben gewesen, wenn für jeden einzelnen Schritt ein separater Bewegungsbefehl ausgeführt wird, nicht ein Befehl für die komplette Route. Anschließend hätte man die Koordinaten des Held-Event abfragen können (nur dann, nicht permanent) und es wäre danach sauber weitergegangen.

Zwar weiß nur der RPG Maker selbst die endgültige Antwort auf die Frage, wieso genau dieses Problem nun in der Form so aufgetreten ist, aber ich komme deswegen zu meiner Vermutung, da man sehr deutlich sieht, dass beim zweiten Monster (welches direkt hinter dem ersten platziert wurde) der Kampf erst viel später beginnt (Held-Event ist komplett auf dem Feld des Monster-Events drauf) als beim Monster direkt davor (Held-Event hat das Feld des Monter-Events gerade mal "berührt). Während nämlich jenes Common Event, welches die Held-Event-Koordinaten überprüft und den Kampf auslöst, noch nicht ganz zu Ende gelaufen ist, läuft der Held schon weiter, da ihm die ganze Strecke ja durchgehend in einem Befehl vorgegeben wird. Selbst wenn man den anschließenden Fehler (also das Problem mit dem vermeindlich endlosen Kampf) etwas länger laufen lässt und den Held mehrmals tötet bzw. sich mehrmals töten lässt, kommt man aus dem Kampf zwar irgendwann wieder raus, aber man sieht sehr schön, dass das Monster nicht als besiegt angesehen wird (Monster-Event wird nicht wegteleportiert) bzw. der Held nicht put ist. Irgendwie müssen sich somit die parallelen Prozesse und der Bewegungsbefehl verheddert haben, so dass das Common Event nicht komplett bis zum Ende durchlaufen konnte.

Es wäre angemessener gewesen, wenn in diesem Skript maximal ein paralleler Prozess laufen würde. Das hätte schon Unstimmigkeiten verhindern können. ;)

Sölf
09.01.2013, 17:22
Wie gesagt, mittlerweile ganz anders gelöst. Ich hatte auch erst daran gedacht den Helden einmal laufen zu lassen, dann das Event mit der Koordinaten Abfrage aufzurufen und dann erst wieder laufen zu lassen. Aber ich dachte dann würde alles hängen bzw abgehackt sein. Mittlerweile hab ich es auch so eingerichtet dass der Held nur noch eine gerade läuft und danach eine neue Eventseite aufgerufen wird. Aber gut, jetzt klappts ja. xD