Aktionen schließen sich gegenseitig aus? (Das Rätsel mit der Kröte)

  • #1, by lee-sonntagFriday, 12. June 2020, 20:21 4 years ago
    Ich arbeite im Moment an einem Spiel in dem ein Puzzle mit einem Wasserrad vorkommt. Der Spieler muss A) das Wasserrad wieder ans Laufen bringen, indem er eine Kröte mit Essen weg lockt und er muss B) ein Seil an dem Rad fest machen. Diese beiden Dinge sollen in beliebiger Reihenfolge gemacht werden können.
    Doch wenn ich den Prozess im Spiel teste gelingt es mir immer nur einen der Beiden Aufgaben zu erledigen. Dabei ist es egal ob ich mit A) oder B) anfange. Die jeweils zweite Aufgabe funktioniert nicht mehr. Ich kann die Gegenstände noch aus meinem Inventar ins Bild ziehen aber wenn ich versuche sie auf dem entsprechenden Objekt abzulegen, passiert nichts. 

    Habe ich vielleicht einen Logikfehler in meinen Aktionen (s. Bilder) verbaut, den ich nicht sehe? Oder kann das noch andere Gründe haben? Bin für jede Idee dankbar.

    Newbie

    15 Posts


  • #2, by sebastianFriday, 12. June 2020, 21:22 4 years ago
    sieht jetzt so erstmal in Ordnung aus. Beide aktionen sind vollkommen unabhängig voneinanders, bis auf dass es bei dem Wasserrad Bedingt durch "Rad_dreht-sich" einen anderen Kommentar gibt.

    Ist denn das Objekt noch benutzbar (bzw. "Look at") nachdem jeweils eines der anderen Items abgelegt wurden?
    Das sollte ja unabhängig voneinander funktionieren.

    Thread Captain

    2346 Posts

  • #3, by MachtnixFriday, 12. June 2020, 21:24 4 years ago
    Ins Blaue würde ich sagen: du musst jedesmal eine gekoppelte Abfrage einbauen. Kröte weglocken ist Aktion A und erhält z.B. eine Variable, die entweder wahr oder falsch sein kann (so würde ich das machen). Dann musst du auch jedesmal Aktion B abfragen (Wasserrad mit Seil). Erst wenn beide Bedingungen erfüllt sind (A UND B sind wahr), ist die Mission abgeschlossen. Solange eine Aufgabe erfüllt ist, die andere aber nicht, ist die fehlende immer noch weiterhin aktiv. Man kann es auch mit Werten machen, die kombinierten Bedingungen sind in Vis etwas unkomfortabel...

    Wichtig ist, sich zu überlegen, von welchen Faktoren eine Aktion abhängig ist und wo man die einbaut. Da gibt es zig Möglichkeiten, je nachdem, wie deine Spielestruktur aussieht. Es ist mehr ein Logik-Denkproblem als ein technisches...

    Mehr kann ich gerade nicht dazu sagen. Kann gerade nicht in Visionaire.

    Thread Captain

    1097 Posts

  • #4, by lee-sonntagSaturday, 13. June 2020, 14:38 4 years ago
    Zunächst einmal danke für die Rückmeldung!

    In Bezug auf die Frage von Sebastian: Leider sind die Objekte nicht mehr nutzbar nachdem das erste Item abgelegt wurde. Mir wird noch der Name des Objekts neben meinem Cursor angezeigt aber sonst bekomme ich keine Aktion ausgelöst.

    Newbie

    15 Posts

  • #5, by MachtnixSaturday, 13. June 2020, 15:30 4 years ago
    Mir ist das Problem noch nicht ganz klar: du hast zwei Objekte: Kröte und Wasserrad. Du hast zwei Items: Seil und Futter. Ziehst du "Futter auf Kröte", wird Aktion A ausgelöst: Kröte hüpft weg. Ziehst du das "Seil auf das Wasserrad", wird es angeknotet (oder was die Aktion sein soll). Vertauschst du die Aktionen, passiert natürlich gar nichts, außer Kommentaren, denn die Kröte braucht kein Seil und das Rad kein Futter. In beiden Fällen wird nur bei erfolgreicher Aktion etwas geändert, entweder ein Wert hochgezählt oder eine Variable auf "wahr" gesetzt. Erst bei erfolgreichen zweimaligem "wahr" wird die finale Aktion freigeschaltet. Vorher passiert mit dem Rad nichts.

    Die Kröte wäre z.B. bereits weggehüpft (Futter auf Kröte = wahr, aber Seil an Rad = falsch), aber das Seil für das Rad ist ja noch im Inventar. Andersherum wäre das Rad verknotet (Seil an Rad = wahr, Futter auf Kröte = falsch), aber die doofe Kröte sitzt da noch und wartet auf den Spieler. Für die funktioniert nur das Futter. In jedem Fall kannst du die Reihenfolge beliebig wählen.

    Die beiden Aktionen kommen sich doch gar nicht ins Gehege. Anders wäre es, wenn du drei Objekte z.B. auf das Wasserrad ziehen müsstest: dann wäre es quasi eine Stapelabfrage. Die ist tatsächlich kniffliger.  Offenbar hast du irgendwo in der Logik auch die Aktion B beeinflusst, wenn du Aktion A ausführst, da sie deaktiviert wird. Ich schätze mal, das liegt an falsch gekoppelten Abfragen.


    Thread Captain

    1097 Posts

  • #6, by lee-sonntagSaturday, 13. June 2020, 16:10 4 years ago
    Deine Beschreibung ist soweit korrekt. Genau so soll es in der Theorie ablaufen. Ich dachte auch, dass die beiden Abläufe sich gegenseitig nicht stören dürften. Aber irgendetwas scheint im Bogen zu laufen, denn jede Aktion für sich alleine funktioniert reibungslos. 
    Ich bekomme die Kröte gefüttert oder ich bekomme das Seil ans Rad. 

    Wenn allerdings eine der Beiden Aktion ausgeführt ist klappt die andere nicht mehr. Also habe ich beispielsweise erst die Kröte gefüttert, bekomme ich das Seil nicht mehr ans Rad. Wenn ich aber zuerst das Seil am Rad fest binde, klappt es nicht mehr die Kröte zu füttern. 

    Bei der jeweils zweiten Aktion bekomme ich zwar noch den Namen des Objekts neben meinem Cursor angezeigt aber ich kann es nicht mehr ansehen oder Items darauf ablegen. 

    Ich hoffe das ist etwas verständlicher gewesen. 

    Ich arbeite noch nicht besonders lange mit Vis und habe daher noch ein recht eingeschränktes Verständnis dafür welche Fehlerquellen es da geben könnte. 
    Ich habe zunächst gedacht das liegt an den Aktionen, die ich programmiert habe aber sehe dort keinen Logikfehler. 
    Und wenn die Objekte "inaktiv" werden würden, könnte ich doch auch deren Namen nicht mehr sehen, oder? 

    Newbie

    15 Posts

  • #7, by MachtnixSaturday, 13. June 2020, 16:34 4 years ago
    Durch deine Screenshots steige ich nicht so recht durch. Mir fällt aber auf, dass du Bedingungen nicht nur auf wahr, sondern auch auf falsch setzt. Variablen sind in Vis zuallererst global, d.h. sie gelten immer und überall, solange sie nicht geändert werden. Wenn du also irgendwo x=1 festlegst, ist x in allen Bereichen dann tatsächlich 1. Deshalb Obacht, wann und wo du Bedingungen definierst. Sie müssen schlüssig an einer Position definiert werden, die nachfolgende Bedingungen beeinflussen können. In diese Falle, durch wechselseitiges Umändern eines Wertes nie weiterzukommen, bin ich auch oft getappt.
    Ich würde die Abfrage in eine "Wenn, dann" -Bedingung einbetten. Z.B. Aktion "Futter auf Kröte" ausführen:

    Am Anfang des Spiels wird Futtauffrosch auf 0 gesetzt.

    Wenn Futtauffrosch == 0 (Variablen sollten besser kein ö enthalten...)
    Dann führe Aktion Futter auf Frosch aus (Futter draufziehen)
    Aktion / Animation Kröte hüpft weg
    Setze Futtauffrosch = 1
    Sonst
    Gebe witzigen Kommentar aus
    Ende wenn

    Ab hier ist Futtauffrosch immer 1. Die erste Anweisung wird also nie mehr ausgeführt, da Futtauffrosch nicht mehr 0 wird. Man muss aber aufpassen, dass man den Punkt, an dem Futtauffrosch == 0 ist, nie mehr erreicht oder anwählen kann. Sonst stürzt das natürlich zusammen.

    Die gleiche Prozedur auch für Seil und Rad. Danach müssten beide Werte auf 1 stehen. Also 

    Wenn Futtauffrosch == 1 AND Seilanrad == 1
    Dann Raddreh = 1
    Ende

    Die Frage ist nur, wo und wie du die finale Abfrage einstellst. Man kann sie ebenfalls jedesmal abfragen (das würde ein verschachteltes Wenn-dann bedeuten!), aber wenn z.B. die Kulisse danach verlassen und nie mehr erreicht wird (gibt es häufig), kann man die Abfrage an den Kulissenstart setzen. Also z.B. 

    Wenn Raddreh == 0
    Tue dies und das Belangloses
    Sonst
    Starte Radanimation
    Ende

    Je nachdem, was eigentlich passieren soll. Da das Rad sich drehen soll, muss ja dadurch sowieso eine weitere Bedingung gexetzt werden - sonst hätte das ja keinen Sinn.

    Ich bin sicher, dass Profiprogrammierer das sicher eleganter machen, aber ich bin dafür, dass etwas funktioniert. 

    Thread Captain

    1097 Posts

  • #8, by lee-sonntagSaturday, 13. June 2020, 18:00 4 years ago
    Vielen Dank, dass du dir die Zeit nimmt mir so ausführlich zu helfen. 
    Dennoch habe ich ein wenig das Gefühl wir reden an einander vorbei. 

    Ich habe den Vorschlag nach bestem Verständnis ausprobiert und keinen Erfolg gehabt. Ob man nun Werte oder Bedinungen benutzt, kommt in meinem Fall aufs Gleiche hinaus. Ich verstehe, dass man mit Werten nicht so einfach in eine an-aus-loop kommt, die einen nicht weiter kommen lässt. Allerdings fürchte ich dass, das nicht das Kernproblem ist.

    Ich habe noch mal Bilder angehangen auf denen man die Konsole beim testspielen sehen kann. Mit den eben vorgeschlagenen Werten darin.
    Wie darauf zu erkennen ist, bekomme ich nur einen von zwei Zuständen hin. Beim ersten Testlauf habe ich das Seil am Rad befestigt (aber kann jetzt nicht mehr mit der Kröte interagieren) und im zweiten Testlauf ist die Kröte gefüttert und damit verschwunden (ich bin aber nicht mehr in der Lage das Seil auf dem Rad abzulegen). Mein Ziel ist es diese beiden Zustände parallel hin zu bekommen. Was danach passiert und was diese beiden Zustände zusammen dann auslösen ist für mich erstmal uninteressant. 

    "Durch deine Screenshots steige ich nicht so recht durch. Mir fällt aber auf, dass du Bedingungen nicht nur auf wahr, sondern auch auf falsch setzst."
    Ich habe mir das noch einmal genauer angeschaut. Die einzige Bedingung, die ich tatsächlich auf falsch umstelle ist die "Kröte_on_screen". Diese ist dafür zuständig ob die Kröte sichtbar/interagierbar ist. Denn nach der Fütterung soll die Kröte ja verschwunden sein.
    Bei den restlichen Bedingungen frage ich nur ab ob sie falsch sind. Ich weiß nicht ob das etwas ist, dass zu Fehlern geführt haben könnte.


    Es tut mir leid, sollte das wieder unverständlich gewesen sein. Mir fehlt an gewissen Stellen, glaube ich, einfach das fachliche Vokabular um mein Problem schlüssig  zu schildern.


    Newbie

    15 Posts

  • #9, by MachtnixSaturday, 13. June 2020, 18:09 4 years ago
    Hm, grübel.

    In deinem ersten Screenshot (ganz oben, 1. Beitrag) sehe ich, dass du z.B. die Bedingung "Rad dreht sich" bereits beim Krötenfüttern erfüllen lässt. Warum? Das Krötenfüttern reicht alleine ja nicht aus, um das Rad zu drehen. Da fehlt die Abfrage, ob das Seil schon befestigt wurde. Erst DANN darf sich das Rad drehen, wenn ich es richtig verstanden habe.

    Edit: stimmt, die Kröte muss ja weg.

    Irgendwo ist da noch ein Knoten drin...

    Thread Captain

    1097 Posts

  • #10, by lee-sonntagSaturday, 13. June 2020, 18:13 4 years ago
    Ich habe so eine schnelle Antwort nicht erwartet. Bevor das untergeht.. ich habe meinem letzten Eintrag noch etwas hinzugefügt.

    Doch das ist soweit korrekt. Die Kröte blockiert das Rad. Durch die Fütterung soll die Kröte unter dem rad hervorgelockt werden. 
    In der späteren Entwicklung des Spiels würde ich da noch eine Animation einfügen, die zeigt wie die Kröte davonhüpft. Die Animation habe ich aber nocht nicht. ich wollte zunächt die groben Züge laufen haben.

    Das hätte ich aber auch mal eher erwähnen können. Tunnelblick .

    Newbie

    15 Posts

  • #11, by MachtnixSaturday, 13. June 2020, 18:19 4 years ago
    Leg' dir doch mal einen skizzierten Entscheidungsbaum an. Und eine Tabelle, wann welcher Wert steht.

    Visionaire ist da so flexibel, dass man oft den Überblick verliert, wo, in welcher Aktion wann was steht... Da deine beiden Aktionen unsymmetrisch aufgebaut sind (in der Seil-Aktion ist die Wenn-Abfrage, aber nicht in der Kröten-Aktion), obwohl sie ja im Spiel als gleichwertig und austauschbar auftauchen, wird der Fehler vermutlich dort sein.

    Thread Captain

    1097 Posts