JirkaDellOro / FUDGE_Story

A FUDGE module for the easy development of interactive stories, visual novels and simple adventure games
https://jirkadelloro.github.io/FUDGE_Story/
7 stars 9 forks source link

Tastendruck und Klicks ohne Story Fortschritt #19

Closed SamuelKasper closed 2 years ago

SamuelKasper commented 3 years ago

Das Öffnen/ Schließen des Inventars (über eine Taste), sowie auch das Betätigen der Buttons des ingame Menüs führt dazu, dass die Visual Novel inhaltlich weiter läuft. Wäre es möglich das voranschreiten der Novel beim Betätigen bestimmter Tasten / klicken des Menüs zu unterbinden? Es wäre super, wenn man selbst festlegen könnte, bei welchen Tasten die Story nicht weiter gehen soll. Ich habe beispielsweise Features auf den Tasten I (Inventar öffnen / schließen), M (Menü ein/ausblenden) und T (Textbox ein/ausblenden). Beim Drücken dieser Tasten sollte kein „klick“ ausgelöst werden.

JirkaDellOro commented 3 years ago

Das sollte alles per await zu regeln sein, funktioniert da etwas nicht?

SamuelKasper commented 3 years ago

Wo müsste ich das await in diesem Fall denn reinpacken? grafik grafik

Wenn ich beim Inventar öffnen/ schließen await vorne drann packe bekomme ich beim Schließen des Inventars den folgenden Error: grafik grafik

JirkaDellOro commented 3 years ago
  1. im oberen Bild macht es den Anschein, dass Du ein ganz eigenes Menüsystem gebastelt hast und nicht das von FUDGE-Story verwendest, Dann ergibt await keinen Sinn.
  2. im unteren Bild passt
    1. das await bei close nicht, weil close keine asynchrone Funktion ist
    2. laut der Fehlermeldung es nicht, dass das Menü bereits geöffnet wurde. Hast Du es im HTML mit open versehen?
SamuelKasper commented 3 years ago

Zu 1: Ich habe schon das FUDGE-Story Menü benutzt. An der Stelle möchte ich es nur per Tastendruck aus / einblenden, weswegen ich mir per getElementsByClassName das Menü Element hole, um es bearbeiten zu können.

Zu 4: Das Öffnen des Inventars hatte mit dem Code aus dem Bild funktioniert. Die Fehlermeldung kam erst, nachdem ich es durch erneuten Druck auf die I-Taste wieder schließen wollte. (open hab ich nicht benutzt.) image

Wenn ich die awaits beim Inventar wegmache, funktioniert das mit dem schließen und öffnen auch so wie es soll, am code an sich sollte es also eigentlich nicht liegen.

Rina14 commented 3 years ago

Das Öffnen/ Schließen des Inventars (über eine Taste), sowie auch das Betätigen der Buttons des ingame Menüs führt dazu, dass die Visual Novel inhaltlich weiter läuft. Wäre es möglich das voranschreiten der Novel beim Betätigen bestimmter Tasten / klicken des Menüs zu unterbinden? Es wäre super, wenn man selbst festlegen könnte, bei welchen Tasten die Story nicht weiter gehen soll. Ich habe beispielsweise Features auf den Tasten I (Inventar öffnen / schließen), M (Menü ein/ausblenden) und T (Textbox ein/ausblenden). Beim Drücken dieser Tasten sollte kein „klick“ ausgelöst werden.

@SamuelKasper @JirkaDellOro Die Szene soll nicht bei bestimmtem Tastendruck gesperrt sein, sondern die Szene soll generell nicht weiterlaufen, wenn Buttons des Menüs oder des Inventars betätigt werden. Sprich, diese sollen nicht als "Weiter-Per-Klick" für die Szene gewertet werden.

JirkaDellOro commented 3 years ago

Ah... dann geht es eigentlich gar nicht um das Menü sondern darum, wann die Story fortsetzt. Bzw. wie es implementiert ist, dass die Story stoppt. @SamuelKasper : wie machst Du das gerade?

@Rina14 : wie hatten wir das in der ersten Version gemacht, wo man einen Text durchblättern konnte?

SamuelKasper commented 3 years ago

Naja, also aktuell stoppt die Story bei mir ja nicht, wenn ich irgendeine Taste drücke oder das Menü benutze.

JirkaDellOro commented 3 years ago

Also sie pausiert erst gar nicht? Oder sie beendet die Pause sobald Du eine Taste drückst oder das Menü benutzt?

Poste bitte Links zu Quellcode auf Github und zur App auf Pages

SamuelKasper commented 3 years ago

Der Text / die Story läuft bei mir weiter, wenn ich eine Taste drücke, bzw. das Inventar öffne/schließe (Taste I) oder auf das Menü (Speichern/Laden/Steuerung/Credits) klicke.

Quellcode: https://github.com/SamuelKasper/VisualNovelEndabgabe/tree/main/Endabgabe/Source

Die Tastenabfragen / Menü sind in der Main: https://github.com/SamuelKasper/VisualNovelEndabgabe/blob/main/Endabgabe/Source/Main.ts

Pages: https://samuelkasper.github.io/VisualNovelEndabgabe/Endabgabe/index.html

Rina14 commented 3 years ago

Ah... dann geht es eigentlich gar nicht um das Menü sondern darum, wann die Story fortsetzt. Bzw. wie es implementiert ist, dass die Story stoppt. @SamuelKasper : wie machst Du das gerade?

@Rina14 : wie hatten wir das in der ersten Version gemacht, wo man einen Text durchblättern konnte?

Genau und wie Samuel schon gesagt hat, es funktioniert bei ihm nicht bzw. bei keinem.

Das war mit progress und einer do-while Schleife gelöst worden, ist auch unter Tutorial in der Szene NovelPages nochmal drin. Bin mir gerade aber nicht mehr sicher, warum wir progress (dataForSave) benutzt hatten, glaube das kann weggelassen werden.

Rina14 commented 3 years ago

@JirkaDellOro Wenn Du Dein Example durchgehst ist es ja genau das selbe Problem mit dem inhaltlichen Weiterlaufen oder das Tutorial etc.

JirkaDellOro commented 3 years ago

Ok, ich denke, ich weiß jetzt, worauf ihr hinaus wollt. Ich habe eine neue Version gebastelt, bei der die Pointer-Events von Menü und Inventar nicht weiter propagiert werden, bitte testen.

Was die Tastaturkommandos betrifft, ist die Sache ein wenig komplizierter, da es derzeit ja explizit so implementiert ist, dass jede Taste ein "weiter" darstellt. Es kann nicht festgestellt werden, ob die Taste noch eine weitere Funktion hat und nicht mehr das Standardverhalten aufweisen soll. Hier bitte folgendes probieren:

Alternativ könnte man auch die Tasten mit Standardverhalten einschränken, in dem man Speech.signalNext überschreibt.

Rina14 commented 3 years ago

Dass jede Taste ein "weiter" darstellt, finde ich problematisch und ist eher unüblich. Besser fände ich es, wenn ausschließlich die Leertaste neben dem Klick als "weiter" gezählt wird. Wäre das nicht einfacher?

SamuelKasper commented 3 years ago

Hab mir eben mal die neuste Fudge-Story Version gezogen und ausprobiert, allerdings löst das benutzen des Menüs nach wie vor einen "klick" aus.

JirkaDellOro commented 2 years ago

Oh... ich hatte das nur in der simplen getInput-Methode implementiert und nicht im statischen Menü. Bitte nochmal testen jetzt,

SamuelKasper commented 2 years ago

Klappt jetzt. Das Menü löst keinen "klick" mehr aus.

JirkaDellOro commented 2 years ago

Dass jede Taste ein "weiter" darstellt, finde ich problematisch und ist eher unüblich. Besser fände ich es, wenn ausschließlich die Leertaste neben dem Klick als "weiter" gezählt wird. Wäre das nicht einfacher?

Soll ich das mal so als Standard implementieren?

Rina14 commented 2 years ago

Ja, bitte.

JirkaDellOro commented 2 years ago

Bitte testen

Es gibt nun zudem eine neue globale Funktion getKeypress(_code), der man einen Keycode mitgibt und die ein Promise liefert, das erfüllt wird, wenn die Taste gedrückt wird. Kann man z.B. mit await nutzen um auf eine spezifische Taste zu warten oder mit ()=> in Progress.defineSignal um ein Signal zu definieren.

SamuelKasper commented 2 years ago

Ich habe zwar nicht ganz verstanden, wofür das getKeypress zuständig ist, bzw. wie ich es benutze, aber ich kann jetzt auf jeden Fall Inventar etc. öffnen, ohne das ein "Klick" ausgelöst wird. Funktioniert für mich jetzt so wie es soll.

JirkaDellOro commented 2 years ago

@Rina14 kann man dann hier schließen?

Rina14 commented 2 years ago

@SamuelKasper die Syntax ist dieselbe wie beim Definieren eines Signals:

let pressK: ƒS.Signal = ƒS.Progress.defineSignal([() => ƒS.getKeypress(ƒ.KEYBOARD_CODE.K)]);

und dem jeweiligen Aufruf dann einfach:

await pressK();

Kann man dann z.B. in Kombination mit ƒS.Text.print("Drücke K"); ankündigen


@JirkaDellOro Ja, alles getestet. Das ist schon deutlich besser jetzt ohne dem ständigen Weiter bei beliebigen Tasten. Vielen Dank!