Seite 2 von 2 ErsteErste 12
Ergebnis 21 bis 25 von 25

Thema: Problem mit Kampfsystem ._.

  1. #21
    Wie löse ich den Fehler aus?

  2. #22
    Ups...vergessen zu erklären.^^
    Einfach starten und dann nach rechts auf das Feld zwischen dem Jungen und dem Baumstumpf. Dann einfach draufstellen und Enter drücken.
    Dann kurz warten und dann "Abwehr" auswählen und Enter drücken.

  3. #23
    Aaaaahhhhh, Fehler gefunden.

    Du ziehst dir selbst den Boden unter den Füßen weg.

    Zuerst eine Vorinformation: Der RPG Maker checkt zu Beginn jedes Frames die Startbedingungen der Events.
    Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.

    Was passiert ist:

    === Framebeginn ===
    RPG Maker überprüft Startbedingungen, Switch 4 ist an, also wird Event "EV0029", Seite 1, ausgeführt.
    Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.
    Event "EV0029", Seite 1, callt Event "Heldenzüge", Seite 1.
    Event "EV0029", Seite 1, stellt Switch 4 "Cursor" aus.
    Event "Heldenzüge", Seite 1, callt Event "Heldenzüge", Seite 4.
    (Event "Heldenzüge", Seite 1, stellt Switch 4 "Cursor" nochmal aus, warum auch immer.)
    Event "Heldenzüge", Seite 4, callt Common Event "HP Anzeige".
    Common Event "HP Anzeige" führt ein "Wait 0.0" aus, was bedeutet "auf nächsten Frame warten".
    === Nächstes Frame ===
    RPG Maker überprüft Startbedingungen, Switch 4 ist aus, also wird Event "EV0029", Seite 1, nicht ausgeführt. <<< und zwar die Skripteinheit. Siehe unten.

    Du musst geistig unterscheiden zwischen einer Eventseite als Einheit auf der Map (bzw. Common Event als Einheit in der Database) und als "Skripteinheit". Eine Skripteinheit hat einen Callstack (d.h. einen "Stapel" der sich merkt wenn das Event andere Events gecallt hat, damit am Ende des gecallten Event zur Ursprungsposition zurückgekehrt werden kann) und einen Linepointer, der dem RPG Maker sagt, was die aktuell ausgeführte Zeile ist (was nicht zwingend in derselben Einheit auf der Map sein muss! D.h., Event "EV0029", Seite 1, kann - wie es hier passiert - einen Linepointer haben der gerade auf Common Event "HP Anzeige" zeigt!), sowie ein paar andere Daten (aktuelle "Wartezeit" wenn gerade ein Wait aktiv ist, etc.). Effektiv ist jede "Skripteinheit" eine parallel laufende Instanz des Eventinterpreters des RPG Makers.

    Der Linepointer (der interne "Skriptzeilencursor") für Event "EV0029", Seite 1, befindet sich zu Beginn des neuen Frames (durch das Wait 0.0 bedingt) gerade am Ende von Common Event "HP Anzeige", denn der Callstack von diesem Eventskript sieht gerade so aus:

    ===> Common Event "HP Anzeige", Zeile 22: <> Wait 0.0 <<< aktueller Linepointer
    ==> Event "Heldenzüge", Seite 4, Zeile 79: <> Call Event: Common Event "HP Anzeige"
    => Event "Heldenzüge", Seite 1, Zeile 51: <> Call Event: "Heldenzüge", Seite 4
    > Event "EV0029", Seite 1, Zeile 42: <> Call Event: "Heldenzüge", Seite 1 <<< Ursprungsevent, wird dieses deaktiviert, wirkt sich das auf den gesamten Stapel aus

    D.h., durch Deaktivieren von Switch 4, der Startbedingung für Event "EV0029", Seite 1 ist, wird die Ausführung der damit zugeordneten Skripteinheit unterbrochen, auch wenn diese gerade einen Linepointer hat der auf ein anderes Event zeigt (hier das Common Event). Dieser Effekt wird "scheinbar" erst durch "Wait 0.0" ausgelöst, weil das Wait auf den nächsten Frame wartet, und der RPG Maker nur zu Beginn jedes Frames die Startbedingungen überprüft, also das Ausschalten von Switch 4 solange keinen Effekt hat bis das Frame endet.

    Du musst also deinen Code umbauen sodass du dir nicht mehr wie eingangs erwähnt selbst den Boden unter den Füßen wegziehst, z.B. indem du Switch 4 nicht als Startbedingung verwendest sondern das gesamte Event "EV0029" in ein "<> Conditional Branch: If Switch [0004:Zug] == ON" packst (obwohl ich vermute dass das nichtmal notwendig ist weil das Event ja niemals wieder von vorne beginnt während die zugehörige Skripteinheit noch nicht am Ende der Eventseite angelangt ist, was ja erst passiert wenn es aus den ganzen gecallten Events zurück ist - aber ich hab deine Events nicht so genau angeschaut um sagen zu können dass es 100% für dich passen würde).

    Übrigens: Das Debugaddon hat leider einen Fehler der bei gecallten Eventseiten die falsche Eventseitennummer zeigt, darum steht alles was im Heldenzüge-Event passiert in der trace.log als "Pg 6" drinnen, obwohl es in Wirklichkeit in Seite 1 und 4 abläuft.

    Geändert von Cherry (02.04.2013 um 21:09 Uhr)

  4. #24
    Aha Wieder etwas neues gelernt! Danke.

    Aber nur, damit ich das richtig verstanden habe:
    Wenn ich ein Event erstelle und auf Seite 1 als Startbedingung Switch1 setze und dann Seite 2 Aufrufe in der eine Schleife ist, die die Variable1 von 0 bis 10 hochzählt und am Ende einen 0.0 Wait hat.
    Und dann eine Conditional Branch, dass wenn die Variable1 den Wert 5 hat soll Switch1 deaktiviert werden. Dann wird beim nächsten 0.0 Wait das ganze Event abgebrochen, weil bei Seite 1, welche Seite 2 gecallt hat, die Startbedingung nicht erfüllt ist und die Variable1 bleibt folglich beim Wert 5 stehen?

    So ich geh' das mal im Maker ausprobieren. Sollte ja eigentlich reichen, wenn ich den Switch dann erst ganz am Ende deaktivieren lasse. Ansonsten mal gucken wie ich das löse.

    Edit:
    Wunderbar Es funktioniert. Noch einmal vielen, vielen Dank!
    Wer hätte gedacht, das so etwas einfaches solche Folgen hat. Naja jetzt weiß ich es ja. Startswitch immer erst am Ende deaktivieren.

    Geändert von Quetschi (03.04.2013 um 08:40 Uhr)

  5. #25
    Ganz richtig.
    Schön dass es gelöst ist!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •