Closed SamuelKasper closed 2 years ago
Das sollte alles per await
zu regeln sein, funktioniert da etwas nicht?
Wo müsste ich das await in diesem Fall denn reinpacken?
Wenn ich beim Inventar öffnen/ schließen await vorne drann packe bekomme ich beim Schließen des Inventars den folgenden Error:
await
keinen Sinn.await
bei close nicht, weil close keine asynchrone Funktion istZu 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.)
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.
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.
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?
Naja, also aktuell stoppt die Story bei mir ja nicht, wenn ich irgendeine Taste drücke oder das Menü benutze.
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
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
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.
@JirkaDellOro Wenn Du Dein Example durchgehst ist es ja genau das selbe Problem mit dem inhaltlichen Weiterlaufen oder das Tutorial etc.
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:
_event.stopPropagation()
aufrufen, wenn das Tastaturevent nicht weitergeleitet und das Standardverhalten auslösen soll. Ich schätze aber, dass es dann schon zu spät ist und das Standardverhalten schon ausgelöst wurde, daherdocument.addEventListener("keydown", hndKeypress, true);
als Handler registrieren, Durch den dritten Parameter wird der Listener bereits in der capture-Phase aktiviert und ruft den Handler aufAlternativ könnte man auch die Tasten mit Standardverhalten einschränken, in dem man Speech.signalNext überschreibt.
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?
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.
Oh... ich hatte das nur in der simplen getInput-Methode implementiert und nicht im statischen Menü. Bitte nochmal testen jetzt,
Klappt jetzt. Das Menü löst keinen "klick" mehr aus.
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?
Ja, bitte.
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.
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.
@Rina14 kann man dann hier schließen?
@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!
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.