Per Tastatur Text eingeben und in einen String speichern~
Hallo,
hab mich hier angemeldet, da ich hier schon viele Dinge gesehen habe, die mir persönlich sehr weiter geholfen haben, an der Stelle ein Lob an die helfenden Leute hier, ihr macht eure Arbeit wirklich gut. Und das gedenke ich jetzt aus zu nutzen X3
Ich würde eine Texteingabe erstellen, in der man, für den am meisten benutzten Fall, den Namen oder sonstwas eingibt. Kennen sicher einige aus dem Consolenskript von Monsta. So etwas in der Art bräuchte ich. Sprich, der Text, den ich eingebe, soll sichtbar und wenn ich bestätige, in einen String gespeichert werden.
Da ich mich erst in Ruby einarbeite, blicke ich noch nicht wirklich durch. Erste Versuche stellen zwar Buchstaben dar, aber jene aneinander zu reihen, sodass es einen Text ergibt, erweist sich als ziemlich schwierig, für mich momentan unlösbar.
Ich habe mir auch das Consolenskript angesehen und versucht zu verstehen, aber kein Erfolg. Das einzige, was ich ja bräuchte wäre das Skript ohne Historyanzeige der letzten Befehle und ohne Ausführung des eingegebenen Textes als RGSS-Kommando, sondern als Speichern in einen String. Und ohne das Standardfenster im Hintergrund, also das Blaue, dass erscheint, wenn man ein neues Window erstellt.
Nunja, ich hoffe, da kann mir jemand weiter helfen. Ich wäre wirklich dankbar =3
Greetings~
Edit: KD! Ich habe dich verraten xD
hab mich hier angemeldet, da ich hier schon viele Dinge gesehen habe, die mir persönlich sehr weiter geholfen haben, an der Stelle ein Lob an die helfenden Leute hier, ihr macht eure Arbeit wirklich gut. Und das gedenke ich jetzt aus zu nutzen X3
Ich würde eine Texteingabe erstellen, in der man, für den am meisten benutzten Fall, den Namen oder sonstwas eingibt. Kennen sicher einige aus dem Consolenskript von Monsta. So etwas in der Art bräuchte ich. Sprich, der Text, den ich eingebe, soll sichtbar und wenn ich bestätige, in einen String gespeichert werden.
Da ich mich erst in Ruby einarbeite, blicke ich noch nicht wirklich durch. Erste Versuche stellen zwar Buchstaben dar, aber jene aneinander zu reihen, sodass es einen Text ergibt, erweist sich als ziemlich schwierig, für mich momentan unlösbar.
Ich habe mir auch das Consolenskript angesehen und versucht zu verstehen, aber kein Erfolg. Das einzige, was ich ja bräuchte wäre das Skript ohne Historyanzeige der letzten Befehle und ohne Ausführung des eingegebenen Textes als RGSS-Kommando, sondern als Speichern in einen String. Und ohne das Standardfenster im Hintergrund, also das Blaue, dass erscheint, wenn man ein neues Window erstellt.
Nunja, ich hoffe, da kann mir jemand weiter helfen. Ich wäre wirklich dankbar =3
Greetings~
Edit: KD! Ich habe dich verraten xD
Hab hier mal was gemacht.
Füg dieses Skript über Main ein.
Das Fenster kannst du mit
aufrufen.
Im Kopf musst du dann noch die ein paar Sachen einstellen.
Von Zeile 145 befindet sich das Inputskript von Strifty das kanns du rauslöschen solltest du es schon eingebaut haben.
Füg dieses Skript über Main ein.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
#============================================================================== # **Scene_Inputprocessing #------------------------------------------------------------------------------ # #============================================================================== class Scene_InputProcessing #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def initialize(letters=10, id=1) # Hier Standartwerte für VariablenID und Buchstabenanzahl eingeben. @id = id @letters = letters main end def main @alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] #kleines Alphabet @big_alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] # großes Alphabet @index = 0 @text = [""] #Create objects @sprite = Spriteset_Map.new @text_window = Window_InputText.new(224, 224, @letters) # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of objects @sprite.dispose @text_window.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update input_update #Update of objects @sprite.update @text_window.update end #-------------------------------------------------------------------------- # * Input Update #-------------------------------------------------------------------------- def input_update if Input.trigger?("enter") @last_text = "" for i in 0...@text.size @last_text += @text[i] end $game_variables[@id] = @last_text $scene = Scene_Map.new return end if Input.trigger?("back") @index -= 1 if @index > 0 @text[@index] = "" @text_window.text = "" for j in 0...@text.size @text_window.text += @text[j] end return end if Input.trigger?("space") @text[@index] = " " @text_window.text = "" for i in 0...@text.size @text_window.text += @text[i] end @index += 1 return end for i in 0...@alphabet.size if Input.trigger?(@alphabet[i]) and @index < @letters @text[@index] = @alphabet[i] if Input.press?("shift") == false @text[@index] = @big_alphabet[i] if Input.press?("shift") @text_window.text = "" for j in 0...@text.size @text_window.text += @text[j] end @index += 1 return elsif Input.trigger?(@alphabet[i]) and @index >= @letters $game_system.se_play($data_system.buzzer_se) end end end end #============================================================================== # **Window_Text #------------------------------------------------------------------------------ # #============================================================================== class Window_InputText < Window_Base attr_accessor :text #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y, letters) @letters = letters @text = "" @widht = (@letters*6)+64 #Create objects super(x, y, @widht, 64) self.contents = Bitmap.new(@widht - 32, height - 32) refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.draw_text(0, 0, @widht - 32, 32, @text + "_") if @text.size < @letters self.contents.draw_text(0, 0, @widht - 32, 32, @text) if @text.size == @letters @old_text = @text end def update refresh if @old_text != @text super end end #----------------------------------------------------------------- # Input Script # Version : 1.0 # Autor : strify #----------------------------------------------------------------- # Ich habe selber mal nach einen Input script gesucht da # ich keine lust hatte mir selber eins zu erstellen. # Dabei ist mir aufgefallen das die Input scripte im netzt # nicht so wirklich viel bringen da man zwar die tasten # abfragen konnte, jedoch aba nix mit anfangen konnte # da es weder trigger? wie repeat? gegeben hat. # Das sollten andere Scripter jetzt sich bitte nicht als # angriff auf ihr können nehmen. # Die verschiedenen Methoden gab es schon beim alten # Input script vom RGSS nur ich hab sie den neuen Input # script ein wenig angepasst. #----------------------------------------------------------------- # Funktionen :: # Input.trigger?(key) # key=Sring oder HexCode # Falls die Taste gedrückt wird ... (Keine doppelte true ausgabe) # Input.repeat?(key) # key=Sring oder HexCode # Falls die Taste gehalten wird ... # der repeat befehl hat eine verzögerung von 5 frames (Einstellbar in Zeile::56) # Input.press?(key) # key=Sring oder HexCode # Falls die Taste gehalten oder gedrückt wird ... # der press befehl hat keine verzögerung (nicht zu empfehel für listen usw.) # Input.dir4 # Fragt ab ob die Richtungs Tasten benutzt werden. # Ausgabe:: # 2=Down/Unten # 4=Left/Links # 6=Right/Rechts # 8=Up/Unten # Der Befehl für das bewegen des Spielers in Game_Player #----------------------------------------------------------------- # Zum Einbau :: # Eigentlcih ist es den meisten leuten klar die dieses Script # benutzten aber zur sicherheit kommt hier der einbau. # Legt ein neues Leeres Script an. (Rechte Maustaste>Insert) # Kopiert den gesamten Quelltext dan in die Leere Seite hinein # und wolla fertig ist es und kann benutzt werden. #----------------------------------------------------------------- # Sonstiges :: # Da ich zu faul war alle Tasten mit den dazugehörigen # HexCode zu bestücken hab ich mir mal den Hash von # Miikku`s Input Script genommen. #----------------------------------------------------------------- # Ich hoffe das Script gefällt euch. ^^ # Credits bitte falls es verwendet wird. #----------------------------------------------------------------- module Input #-------------------------------------------------------------------------- REPMAX=5 A="shift" B="esc" C="enter" X="a" Y="s" Z="d" L="q" R="w" UP="up" DOWN="down" RIGHT="right" LEFT="left" F1="F1" F2="F2" F3="F3" F4="F4" F5="F5" F6="F6" F7="F7" F8="F8" F9="F9" F10="F10" F11="F11" F12="F12" #-------------------------------------------------------------------------- @keys={ #--------------------------Maus "l mouse" => 0x01, #Linke Maustaste "r mouse" => 0x02, #Rechte Maustaste "m mouse" => 0x04, #Mittlere Maustaste #--------------------------Special "back" => 0x08, #Backspace "tab" => 0x09, #Tabulator-Taste "enter" => 0x0D, #Enter "shift" => 0x10, #Eine der Shift-Tasten "strg" => 0x11, #Alt Gr-Taste oder eine der Strg-Tasten "alt" => 0x12, #Eine alt oder die Num-Block-Taste5 mit num lock "umschalt" => 0x14, #Umschalttaste "esc" => 0x1B, #Escape "space" => 0x20, #Leertaste #--------------------------Extra-Block "bild oben" => 0x21, "bild unten" => 0x22, "ende" => 0x23, "pos1" => 0x24, #--------------------------Pfeil "left" => 0x25, "links" => 0x25, #- "up" => 0x26, "hoch" => 0x26, #- "oben" => 0x26, #- "right" => 0x27, "rechts" => 0x27, #- "down" => 0x28, "unten" => 0x28, #- #--------------------------Extra-Block "snapshot" => 0x2C, "einfg" => 0x2D, "entf" => 0x2E, #--------------------------Zahlen "0" => 0x30, "1" => 0x31, "2" => 0x32, "3" => 0x33, "4" => 0x34, "5" => 0x35, "6" => 0x36, "7" => 0x37, "8" => 0x38, "9" => 0x39, #--------------------------Alphabet "a" => 0x41, "b" => 0x42, "c" => 0x43, "d" => 0x44, "e" => 0x45, "f" => 0x46, "g" => 0x47, "h" => 0x48, "i" => 0x49, "j" => 0x4A, "k" => 0x4B, "l" => 0x4C, "m" => 0x4D, "n" => 0x4E, "o" => 0x4F, "p" => 0x50, "q" => 0x51, "r" => 0x52, "s" => 0x53, "t" => 0x54, "u" => 0x55, "v" => 0x56, "w" => 0x57, "x" => 0x58, "y" => 0x59, "z" => 0x5A, #--------------------------Special "l windows" => 0x5B, #linke "Windows-Taste" "r windows" => 0x5C, #rechte "Windows-Taste" #--------------------------Num-Block "num 0" => 0x60, "num 1" => 0x61, "num 2" => 0x62, "num 3" => 0x63, "num 4" => 0x64, "num 5" => 0x65, "num 6" => 0x66, "num 7" => 0x67, "num 8" => 0x68, "num 9" => 0x69, "num *" => 0x6A, "num +" => 0x6B, "num -" => 0x6D, "num ," => 0x6E, "num /" => 0x6F, #--------------------------F-Zeichen "F1" => 0x70, "F2" => 0x71, "F3" => 0x72, "F4" => 0x73, "F5" => 0x74, "F6" => 0x75, "F7" => 0x76, "F8" => 0x77, "F9" => 0x78, "F10" => 0x79, "F11" => 0x7A, "F12" => 0x7B, #--------------------------Num-Block "num lock" => 0x90, #--------------------------Extra-Block "scroll" => 0x91, #--------------------------Special "l shift" => 0xA0, "r shift" => 0xA1, "l strg" => 0xA2, "r strg" => 0xA3, "l alt" => 0xA4, "alt gr" => 0xA5, #--------------------------Sonderzeichen "ü" => 0xBA, "+" => 0xBB, "," => 0xBC, "-" => 0xBD, "." => 0xBE, "#" => 0xBF, "ö" => 0xC0, #--------------------------Special "menü" => 0xD5, #--------------------------Sonderzeichen "ß" => 0xDB, "^" => 0xDC, "´" => 0xDD, "ä" => 0xDE, "<" => 0xE2 } @used_key = [] @repeat_key=[] @repeat_counter={} #-------------------------------------------------------------------------- def self.dir4 return 2 if self.press? DOWN return 4 if self.press? LEFT return 6 if self.press? RIGHT return 8 if self.press? UP end #-------------------------------------------------------------------------- def self.start @keyboard = Win32API.new('user32', "GetAsyncKeyState", 'i', 'i') end #-------------------------------------------------------------------------- def self.trigger?(key) if key.is_a?(String) key=@keys[key] end return false if @used_key.include?(key) if self.press?(key)#@keyboard.call(key) < 0 @used_key.push(key) return true else return false end end #-------------------------------------------------------------------------- def self.press?(key) if key.is_a?(String) key=@keys[key] end return (@keyboard.call(key) != 0 and @keyboard.call(key) != 1) end #-------------------------------------------------------------------------- def self.repeat?(key) if key.is_a?(String) key=@keys[key] end if !@repeat_counter.has_key?(key) @repeat_counter[key]=0 end if @repeat_key.include?(key) @repeat_counter[key]+=1 if @repeat_counter[key] >= REPMAX @repeat_counter[key]=0 return true else return false end else @repeat_counter[key]=0 return false end end #-------------------------------------------------------------------------- def self.update @keys.each_value {|hex| unless self.press?(hex) @used_key.delete(hex) @repeat_key.delete(hex) else @repeat_key.push(hex) unless @repeat_key.include?(hex) end } end end Input.start |
zum Lesen den Text mit der Maus markieren
Das Fenster kannst du mit
|
|
Ruby Quellcode |
1 |
$scene = Scene_InputProcessing.new |
Im Kopf musst du dann noch die ein paar Sachen einstellen.
|
|
Ruby Quellcode |
1 2 |
@letters = Anzahl an Buchstaben @id = GamevariablenID in welcher der Text gespeichert werden soll. |
Von Zeile 145 befindet sich das Inputskript von Strifty das kanns du rauslöschen solltest du es schon eingebaut haben.
Tikrass
-
Skripts
-
Spiele
-
Tutorials
Hallo,
danke erstmal für das Skript. Hätte nicht gedacht, dass sich so schnell jemand meldet. Das Teil funktioniert ganz wunderbar, genau so wie ich mir das vorgestellt habe =D
Da du ja mit Arrays arbeitest, hast du dir das mit dem letzten Zeichen löschen ja ziemlich erschwert. Bei Strings kann man ja einfach den Befehl chop! benutzen, um das letzte Zeichen zu löschen. Bei Arrays kann man nur Teile rauslöschen, wenn sie existieren. Ich hab überlegt, die Position des letzten Zeichens als Variable zu deklarieren und dann per delete_at(x) das letzte Zeichen zu löschen (wobei x = letztes Zeichen in einer Variable).
Nur ich krieg das nicht hin, da ich bei dir nicht weiß, wie oder wo du das letzte Zeichen betitelst, wenn überhaupt.
Wenn du mir sagst, welches das ist, mach ich's auch selbst ;D
Danke nochmal.
danke erstmal für das Skript. Hätte nicht gedacht, dass sich so schnell jemand meldet. Das Teil funktioniert ganz wunderbar, genau so wie ich mir das vorgestellt habe =D
Da du ja mit Arrays arbeitest, hast du dir das mit dem letzten Zeichen löschen ja ziemlich erschwert. Bei Strings kann man ja einfach den Befehl chop! benutzen, um das letzte Zeichen zu löschen. Bei Arrays kann man nur Teile rauslöschen, wenn sie existieren. Ich hab überlegt, die Position des letzten Zeichens als Variable zu deklarieren und dann per delete_at(x) das letzte Zeichen zu löschen (wobei x = letztes Zeichen in einer Variable).
Nur ich krieg das nicht hin, da ich bei dir nicht weiß, wie oder wo du das letzte Zeichen betitelst, wenn überhaupt.
Wenn du mir sagst, welches das ist, mach ich's auch selbst ;D
Danke nochmal.
Hallo,
für gehobenen Ansprüche -> http://www.rmxp.org/forums/index.php?topic=28392.0
aber wenn du mit dem Script zufrieden bist, behalte ist, da das andere etwas fummlig zu benutzen ist.
Gruß Sven
für gehobenen Ansprüche -> http://www.rmxp.org/forums/index.php?topic=28392.0

aber wenn du mit dem Script zufrieden bist, behalte ist, da das andere etwas fummlig zu benutzen ist.
Gruß Sven

YAams
Random Signatur