Archiv verlassen und diese Seite im Standarddesign anzeigen : Benutzereingabe mit RGSS
Hallo,ich bin gerade daran Ruby zu lernen und nutze das RGSS vom Maker XP...bin da auf einen seltsamen Fehler gestoßen den ich mir nciht erklären kann--->
6: p "Wie ist ihr Name?"
7: name = gets //Fehler! ???? 'Main' ? 7 ??? Errno:EBADF ?????? bad file descriptor
8:
9: p "Hallo " + name + ",wie gehts?"
Baer in allen Ruby Lehrbüchern(hab mehrere) steht das gets für die Benutzereingabe ist und das die Syntax stimmt...kann mir da jemand weiterhelfen?^^
Danke in vorraus
Mfg Ska
Der Drake
24.03.2006, 12:44
http://rubyinstaller.rubyforge.org/wiki/wiki.pl
Und dann Kommandozeilen Programme auch für die Kommandozeile schreiben ^^"
Im Maker müsstest du die Eingabe mit relativ komplizierten WinAPI Befehlen lösen (sprich dierekt beim Betriebssystem nach dem Input fragen), dazu gibt es aber auch bereits einige Skripte.
Der Fehler bedeutet übrigens, dass STDIN kein valider IO Stream ist, könnte man sicherlich auch irgendwie lösen (indem man ein Input Modul schreibt, welches sich genauso verhält wie ein IO Stream, vielleicht), aber das ist alles sehr kompliziert, und für ein Spiel so nicht wichtig.
Kannst du mir nen Link zu solch Skript geben?Ich will das RGSS für eine andere Art von RPG nutzen und dafür brauche ich den Input.Daher ist das enorm wichtig^^
Wäre nett wenn du mir einen Link dazu gegebn könntest.
Mfg Ska
Der Drake
24.03.2006, 20:05
Sowas hier? (http://www.rmxp.net/forums/index.php?showtopic=26168&hl=) Ungefähr wie gets, wenn du einzelne Tasten willst kannst du das Input Modul (in der RGSS bibiliothek enthalten) benutzen.
Naja ich brauch eine Art Chatfenster....das heißt...das ich etwas eingeben kann in das Fenster und das ich dementsprechend dann ein Reaktionsnachricht ausgeben kann...ich will ne Art KI für NPC`s programmieren und dafür brauch ich ein CHatfenster...kanns de mir da helfen...
Btw...der Link geht nich da müsste ich mich extrra reistieren XP
nagut dann mach ich das mal schnell^^
Mfg SKa
http://www.club-anime.de/rmxp/keyboard_2.rar <--- Maus&Tastaturscript von Cybersam (was Maus angeht, rate ich dir dann aber eher das von MagicMagor, aber darum gehts ja jetzt nich ^^).
Bau das Kboard Modul ein. Danach kannst du über die Methode Kboard.keyboard(x) eine Taste abfragen (x = Konstante für die Taste. Du findest sie in dem Modul).
Vielen Dank erstmal....
Aber ich will ja keine einzelnen Tasten abfragen....
Grob gesehen will ich sachen in dem Stil machen:
Der User gibt ein: "Hallo!" und auf genau dieser Eingabe soll dann auch ein Hallo ausgegeben werden...
Oder auch so: der User gibt ein: "Wie gehts?" und als Antwort kommt(aber halt genau nur auf diese Eingabe) dann "Gut!Und dir?" etc....
So mein ich das...^^
Mfg Ska
Der Drake
26.03.2006, 13:37
Ich dachte du lernst Ruby, ein bisschen Eigeninitiative könnte da nicht schaden ^^"
Mach einfach ein Skript, welches die Tasten ständig abfrägt, ist etwas neues gedrückt schiebst du den String der dieser Taste entspricht auf einen bereits vorhanden String (Instanzvariable, mit String#<<).
Wenn die Entertaste gedrückt wird hast du so den vollständigen Input String den du haben wolltest.
Bei jedem Frame muss zusätzlich noch an einer Stelle die derzeitige Form des Strings angezeigt werden, aber das sollte kein so großes Problem sein.
Das Modul dient dazu, Tasten abzufragen. Daraus kannst du dir leicht ne Tasteneingabe scripten.
def get_letter
if Kboard.keyboard($R_Key_A); return 'A'; end;
if Kboard.keyboard($R_Key_B); return 'B'; end;
if Kboard.keyboard($R_Key_C); return 'C'; end;
if Kboard.keyboard($R_Key_D); return 'D'; end;
if Kboard.keyboard($R_Key_E); return 'E'; end;
if Kboard.keyboard($R_Key_F); return 'F'; end;
#und all die anderen Tasten....
end Das fügst du in dein Modul mit ein. Danach kannst du über:
satz = Array.new
Input.update
while Input.trigger?(Input::C) #Bis Entertaste gedrückt
satz.push(Kboard.get_letter) #Speichere Buchstabe in Array
satz.compact! #Entferne leere Buchstaben
Input.update; Graphics.update
end
Du kannst den Code auch noch so umändern:
satz = Array.new
while Input.trigger?(Input::C)
taste = Kboard.get_letter
unless taste.nil?
satz.push(taste)
bitmap.draw_text(x,y, width, height, taste)
x += bitmap.text_size(taste).width + 2
end
end
(das Bitmap musst du vorher natürlich noch erstellen, und in nen Sprite speichern. Hab auch keine Garantie ob das überhaupt funzt XD Muss selbst erstmal ausprobieren
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.