Aktion auslösen, wenn zwei Events sich berühren?

  • Moin,

    wir haben doch sicherlich einige kluge Event-Manager hier, die mir einen kleinen Denkanstoß geben könnten.

    Also folgender IST-Zustand:


    pasted-from-clipboard.png


    Das hier ist ein "Mini-Hacking-Game". Der Spieler muss seinen Schadcode (gelbe Kugeln) an der Antivirussoftware (grüne Kugeln) vorbei in die Server (rote Kugeln) bringen, um sich Zugriff darauf zu verschaffen.


    Dazu kann der Spieler sie wie in einem normalen Kistenschiebespiel bewegen.


    Die Antiviren (grün) bewegen sich aktuell entweder nach dem Zufallsprinzip oder sie fangen an dem Spieler zu folgen, sodass er wegrennen muss.


    Berühren sie den Spieler, setzt sich das ganze Spiel zurück und er muss von vorne anfangen.


    Das würde ich gerne etwas "verbessern" und aus "teilweise Glücksspiel" etwas mehr Skill und Timing abverlangen.



    --------------------------


    --------------------------


    Gewünschter SOLL-Zustand:


    pasted-from-clipboard.png


    Ich werde den Antiviren (grün) teilweise vordefinierte Routen geben, die sie ablaufen. Und dafür ein paar mehr von ihnen platzieren. Dadurch wird aus "Glück" ein Vorausplanen, Moment abwarten und es fühlt sich mehr nach Erfolg und nicht nach "Glück gehabt" an.


    Vordefinierte Routen sind kein Problem. Aber der Spieler kann ja theoretisch seinen Schadcode (gelb) so schieben, dass er die Antiviren (grün) blockiert. Das sorgt nicht nur dafür, dass die Router nicht mehr abgelaufen werden kann, sondern im worst-case auch dazu, dass der Spieler seinen Code (gelb) ebenfalls nicht mehr bewegen kann und er das Level deswegen resetten muss.


    Ich suche eine Möglichkeit (eventuell ein paralleler Prozess?) der besagt: If Event 1 (z.B. grüne Kugel) berührt Event 2 (gelbe Kugel) then teleportiere die gelbe Kugel wieder an Koordinate X,Y (Ausgangsposition) zurück.


    So erkennt und löscht die Antivirensoftware quasi nur den Code und der Spieler darf damit von vorne anfangen, statt das ganze Minispiel deswegen neu starten zu müssen.


    Habe ich im RPG Maker irgendwie die Möglichkeit ein If oder sonst etwas zu triggern und etwas auszulösen, wenn sich 2 Ereignisse berühren?

    Liebe Grüße

  • Du kannst eine if-Abfrage der Koordinaten beider Kugeln machen. Wenn diese übereinstimmen, dann das gewünschte Ereignis triggern lassen.

    Müssten sich die Kugeln dafür aber nicht überlagen können? Genau das tun sie ja nicht, da der Spieler ja auch mit beiden agiert.

    Korrigiere mich gerne, ab in dem Moment wo Kugel 1 vor Kugel 2 liegt und Kugel 1 dahin will wo Kugel 2 ist sind die Koordinaten doch noch nicht identisch sondern sie kommt da einfach nicht hin und die Bedingung ist nicht erfüllt oder?

  • Wird die Berührung denn ignoriert, wenn sich der Spieler in den Weg des Events stellt? Du hast ja anscheinend schon eine Abfrage für die Berührung drinnen, mit der du das Spiel dann zurücksetzt.

    Wenn der Spieler die Antivirussoftware berührt wird er auf eine ausgelagerte Map und zurück teleportiert. Damit setzt sich das ganze Level wieder zurück.

  • Müssten sich die Kugeln dafür aber nicht überlagen können? Genau das tun sie ja nicht, da der Spieler ja auch mit beiden agiert.

    Wenn du die grünen Kugeln auf "Durchgang" stellst, dann können sie durch andere Events und jegliche Hindernisse einfach hindurch. Das ist für deine vordefinierte Route kein Problem, sie darf halt nicht mehr zufällig sein oder dem Spieler folgen, sonst rennt sie durch die anderen Hindernisse durch. Jedenfalls können dann die Events tatsächlich auf der gleichen Koordinate sein. Und der Spielerberührtrigger sollte weiterhin funktionieren.

  • Probiere mal Folgendes:


    Erstelle für jede grüne Kugel einen parallelen Prozess, der überprüft, ob sich eine gelbe Kugel direkt links, rechts, oberhalb oder darunter befindet. Dazu musst du zunächst die Position der grünen Kugel ermitteln und dann die Positionen der gelben Kugeln. Die jeweiligen Positionen musst du dann miteinander vergleichen. Also ungefähr so:


    Var1 = X-Position grüne Kugel

    Var2 = Y-Position grüne Kugel


    Sofern noch nicht eingelocht:

    Var3 = X-Position gelbe Kugel Nr. 1

    Var4 = Y-Position gelbe Kugel Nr. 1


    if (Var1 + 1 == Var3) -> Teleport an Ausgangsposition

    if (Var1 - 1 == Var3) -> Teleport an Ausgangsposition

    if (Var2 + 1 == Var4) -> Teleport an Ausgangsposition

    if (Var2 - 1 == Var4) -> Teleport an Ausgangsposition


    Das Ganze auch für die anderen gelben Kugeln durchführen.

  • if (Var1 + 1 == Var3) -> Teleport an Ausgangsposition

    if (Var1 - 1 == Var3) -> Teleport an Ausgangsposition

    if (Var2 + 1 == Var4) -> Teleport an Ausgangsposition

    if (Var2 - 1 == Var4) -> Teleport an Ausgangsposition

    Mit diesen einfachen Abfragen wäre es in diesem Fall nicht getan. Man müsste nämlich die genaue Position abfragen, also die Kombination aus X- und Y-Koordinate. Und das eben viermal (bzw. achtmal, falls man diagonal auch abfragen möchte) pro gelber Kugel. Deine Abfrage prüft momentan nur, ob die gelbe Kugel auf der X-Achse ein Feld links oder rechts der grünen Kugel, bzw. ob sie auf der Y-Achse ein Feld über oder unter der grünen Kugel ist.

  • Du könntest auch folgendes mal probieren:


    - stell das Event der grünen Kugeln auf "Ereignis-Berührung" und "wie Charakter", dann müsste es eigentlich triggern, wenn sie den Spieler berühren

    - oder stell sie auf "unter Charakter", dann können sie unter den Spieler laufen und triggern dann die Berührung

  • Du könntest auch folgendes mal probieren:


    - stell das Event der grünen Kugeln auf "Ereignis-Berührung" und "wie Charakter", dann müsste es eigentlich triggern, wenn sie den Spieler berühren

    Das habe ich und das klappt auch genau so wie es soll mit dem Spieler. :)


    Ich will ja dass die grünen Kugeln ebenfalls die gelben Kugeln bei Berührung zurücksetzen.

  • Um Ariyanas und Mr. Fus Gedanken aufzugreifen. Mit dieser Formel könntest du prüfen, ob ein Event direkt neben der Spielfigur liegt (in Pseudo-Code)


    Absolut(Spielfigur_x_Koordinate - Event_x_Koordinate) + Absolut(Spielfigur_y_Koordinate - Event_y_Koordinate) <= 1


    Ich bin mir sicher, dass auch Javascript eine abs()-Funktion hat, mit der der absolute Wert einer Zahl zurückgegeben wird, aber zur Not könnte der auch mit Eventcode bestimmt werden (wenn Zahl < 0 dann Zahl * -1).

  • könnte mir das mit der berührung im mv mal bitte jemand für dumme erklären? oder mit einem bild?


    also ich habe zwei events einen wolf und ein hasen die laufen zufällig über die karte. und wenn sich die beiden events berürn dann frisst der wolf den hasen und der hase soll zurück zu seinem bau teleportiert werden so das ein neuer hase kommen kann.

  • Mit diesen einfachen Abfragen wäre es in diesem Fall nicht getan. Man müsste nämlich die genaue Position abfragen, also die Kombination aus X- und Y-Koordinate. Und das eben viermal (bzw. achtmal, falls man diagonal auch abfragen möchte) pro gelber Kugel. Deine Abfrage prüft momentan nur, ob die gelbe Kugel auf der X-Achse ein Feld links oder rechts der grünen Kugel, bzw. ob sie auf der Y-Achse ein Feld über oder unter der grünen Kugel ist.

    Du hast natürlich recht. War wohl schon zu müde...

    Aber Hotzenplotz hat ja meinen Vorschlag noch mal sinnvoll angepasst.


    könnte mir das mit der berührung im mv mal bitte jemand für dumme erklären? oder mit einem bild?


    also ich habe zwei events einen wolf und ein hasen die laufen zufällig über die karte. und wenn sich die beiden events berürn dann frisst der wolf den hasen und der hase soll zurück zu seinem bau teleportiert werden so das ein neuer hase kommen kann.

    Verstehe leider dein Problem nicht so richtig. Willst du wissen, wie du das mit Wolf und dem Hasen im Maker umsetzt oder funktioniert es nicht so, wie es soll?

  • Beim MZ gibt es die Möglichkeit, nicht nur den Spieler als Auslöser einzustellen, sondern ein beliebiges Ereignis:


    pasted-from-clipboard.png


    Ich vermute mal, dass dies beim MV auch geht und dann ist es nicht nötig, die Positionen abzufragen.

  • Ariyana JAIN.

    Also mein aktueller Stand ist wie folgt:


    pasted-from-clipboard.png


    Die vier Grünen spielen Beyblade und drehen ihre vordefinierte Route.

    Sobald der Spieler jetzt das Gelbe so schiebt, dass es mit den Grünen in Berührung kommt wird es wieder an seine default Position teleportiert. Das regel ich mit einem parallelen Prozess der genau abfragt, ob event grün position = event gelb position ist.


    Mein aktuelles Problemchen dabei = Damit die sich überlagern können muss ich die grünen entweder "über", "unter" Charakter oder als "Durchgang" einrichten. Denn sonst kollidieren sie ja mit dem gelben und hängen fest.


    Also habe ich sie aktuell auf "Durchgang" geschaltet.


    Somit funktioniert dieser Ablauf perfekt. Das einzige Problem dabei ist nun:

    Die gehen natürlich auch durch den Spieler durch. Sprich das Event setzt bei Spielerberührung nun nicht mehr das gesamte Level zurück. Ich schätze mal dafür müsste man sich nun ebenfalls eine seperate Abfrage machen. Hat der Spieler ebenfalls eine Event ID? :D


    Chito sobald es bei mir so funktioniert wie ich mir das vorstelle, kann ich dir ein Demoprojekt mit einem Hackinggame schicken dann kannst du es dir anschauen und deinen Wolf zum Killer umbauen. ^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!