ich hab mich jetzt seit lägerer zeit endlich mal wieder ein wenig mit dem "makern" beschäftigt und schaue mir auch gerade die Ruby-Scriptsprache an.
Zu meinem Problem:
Ich möchte gerne Tastatureingaben über die windows api funktion abfragen und jenachdem dann auch Aktionen im Game ausführen. Das funktioniert soweit schon ganz gut. Ich möchte aber temporär (z.B. beim drücken einer Taste) alle Standart-Eingabemöglichkeiten blockieren, also sowohl das Manü, als auch die Spielerbewegungnen usw. Habt ihr ne Idee, wo ich da am besten ansetzen kann?
RGSS verwendet ein eigenes Input-Modul welches die Tastenabfrage übernimmt und in jeglichen Standardscripten verwendet wird.
Auf dem Modul muss regelmäßig die Update-Methode aufgerufen werden damit neue Eingaben getätigt werden können.
Diese Update-Methode wird durch die derzeit bestehende Instanz der Variable $scene aufgerufen.
In der Update-Methode der verschiedenen Szenen sollte irgendwo der Aufruf für das Update von Input liegen.
Du könntest eine globale Variable als Schloss benutzen damit dieses Update des Input-Moduls herausgefiltert wird. Dann müsstest du lediglich in jeder Szene welche das Update aufruft eine Abfrage zum Zustand dieser Schlossvariablen machen.
Ist die Blocker-Taste über die API abgefragt?
Wenn ja funktioniert Cornix' Ansatz, ansonsten wird halt auch eben diese Abbruchbedingung blockiert
Falls dem so ist:
Der Ansatz wäre dann in allen relevanten Scene-updates zu branchen, ob die "Blockier"-Variable sitzt, und dann wenn ja nur die abbruchbedingung überprüfen und sämtliche anderen Änderungen beizubehalten (Logik, Graphic, Audio) [also im Grunde copy&paste der normalen update funktion mit rauseditieren der Input-Abfragen und hinzufügen genau einer neuen), und wenn nein: die alte Funktion plus abfragen der block-taste.
Erstmal danke für die Antworten, ich habe gestern kurz drüber geschaut und der Ansatz sollte funktionieren.
@Todu: Ja, die Abfragen der von mir genutzten Keys mache ich über die Api.
Das Problem was ich mit dieser Lösung hab, ist, das ich das Script, wenn es denn mal fertig ist, auch nur als Script veröffentlichen möchte und nicht für ein Game brauche. Demnach möchte ich den Leuten, die dieses Script benutzen möchten, es so einfach wie möglich machen: im Idealfall nur eben reinkopieren, objekt aufrufen, fertig. Also nicht noch großartig in den (Ich nenn sie mal) "Core"-Klassen rumfuchteln.
Also eine schönere Lösung währe, wenn man mit Hilfe der Api oder so den Input Blokieren könnte, aber dazu kenne ich mich mit diesen ganzen kram kaum aus.
(Komme aus der Webentwickler-Ecke )
Du könntest das Input-Modul direkt blockieren.
Der Code ist ungetestet, aber theoretisch müsstest du damit per
alle Standardeingaben blockieren können.
Ahh coole Sache, danke, probier ich nachher direkt aus.
Off-Topic:
Es ist also möglich auch vorher definierte Klassen zu überschreiben?!
Wird dann die gesamte Klasse überschrieben oder gibt es auch die Möglichkeit nur gewisse Funktionen der klassen zu überschreiben?
EDIT: Ok, hat sich erledigt, ich hab mir den Ruby/RGSS-Kurs von -KD- mal vorgenommen, da steht alles schön erklärt Danke nochmal.
EDIT EDIT: Super, hat funktioniert, ich musste nur nach dem Input.blocked = true noch ein Input.update aufufen