Startseite »
Forum »
RPG-Studio.org - Community »
Community-Forum »
Öffentliches Archiv »
RGSS »
Kampfsysteme »
Texteingabe V2
von Caesar Ermöglicht anstatt der Nummerneingabe auch Text einzugeben.
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
[SIZE=260]Version 2[/SIZE]
So, war doch irgendwie blöde, dass es so umständlich einzubauen ist. Deshalb hab ich's jetzt überarbeitet. Das Nummerneingabefeld habe ich so verändert, dass es je nach Zustand eines Switches Zahlen- oder Texteingaben zulässt. Das hat folgende Vorteile:
Wie verwendet man das Script?
Mit der Nummern-Eingeben-Funktion (engl. Input Number).
In einer der ersten Zeilen heißt es:
Hier ist die ID des Switches festgelegt, die bestimmt, ob ein Text oder eine Zahl eingegeben werden soll. Wenn der Schalter aus ist, funktioniert die Nummer-Eingeben-Funktion wie gehabt. Wenn er an ist, dann kann er einen Text eingeben. Dieser Text wird dann in einer Variable gespeichert und lässt sich dann genauso weiterverwenden wie oben beschrieben (Passwortabfrage, Heldennamen ändern etc.). Die Anzahl der eingebbaren Buchstaben ist gleich der beim Nummern-Eingeben-Befehl festgelegten Anzahl Ziffern. Die Variable, in der die Eingabe gespeichert wird, ist ebenfalls die beim Nummern-Eingeben-Befehl eingestellte. Enthält die Variable einen leeren String ("") oder einen Zahlenwert, besteht der voreingestellte Text aus der eingestellten Anzahl Leerzeichen.
Enthält die Variable bereits einen String (Text), ist dieser voreingestellt und die Anzahl eingebbarer Zeichen ist gleich der Länge des voreingestellten Strings.
Ist zugegeben ein wenig kompliziert, also fragt, wenn ihr Fragen habt!
Der Code
Folgender Code muss über Main als neues Script eingefügt werden. Es müssen keine weiteren Änderungen vorgenommen werden.
So, war doch irgendwie blöde, dass es so umständlich einzubauen ist. Deshalb hab ich's jetzt überarbeitet. Das Nummerneingabefeld habe ich so verändert, dass es je nach Zustand eines Switches Zahlen- oder Texteingaben zulässt. Das hat folgende Vorteile:
- Der Einbau ist viel einfacher: Man muss nur ein Neues Script über Main einfügen
- Das Script ist kompatibel mit dem AMS
- Wenn die Variable, in der die Eingabe gespeichert werden soll, bereits einen Wert enthält, ist dieser Text voreingestellt
- Man braucht keine Call-Scripts
Wie verwendet man das Script?
Mit der Nummern-Eingeben-Funktion (engl. Input Number).
In einer der ersten Zeilen heißt es:
|
|
Quellcode |
1 |
SWITCH_ID = 1 |
Hier ist die ID des Switches festgelegt, die bestimmt, ob ein Text oder eine Zahl eingegeben werden soll. Wenn der Schalter aus ist, funktioniert die Nummer-Eingeben-Funktion wie gehabt. Wenn er an ist, dann kann er einen Text eingeben. Dieser Text wird dann in einer Variable gespeichert und lässt sich dann genauso weiterverwenden wie oben beschrieben (Passwortabfrage, Heldennamen ändern etc.). Die Anzahl der eingebbaren Buchstaben ist gleich der beim Nummern-Eingeben-Befehl festgelegten Anzahl Ziffern. Die Variable, in der die Eingabe gespeichert wird, ist ebenfalls die beim Nummern-Eingeben-Befehl eingestellte. Enthält die Variable einen leeren String ("") oder einen Zahlenwert, besteht der voreingestellte Text aus der eingestellten Anzahl Leerzeichen.
Enthält die Variable bereits einen String (Text), ist dieser voreingestellt und die Anzahl eingebbarer Zeichen ist gleich der Länge des voreingestellten Strings.
Ist zugegeben ein wenig kompliziert, also fragt, wenn ihr Fragen habt!
Der Code
Folgender Code muss über Main als neues Script eingefügt werden. Es müssen keine weiteren Änderungen vorgenommen werden.
|
|
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 |
#/////////////////////////////////////////////Texteingabe V2////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~by Caesar~~~~~~~~~~~~~~~~~~~~~
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Window_InputNumber < Window_Base
# Der Schalter mit dieser ID bestimmt, ob ein Text (true) oder eine
# Zahl (false) eingegeben werden soll
SWITCH_ID = 1
# hier kann der Zeichenvorrat verändert werden
TEXT_ALPHABET = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
NUMBER_ALPHABET = "0123456789"
def initialize(chars_max)
@config = Array.new(chars_max, 0)
dummy_bitmap = Bitmap.new(32, 32)
@cursor_width = dummy_bitmap.text_size("0").width + 10
dummy_bitmap.dispose
super(0, 0, @cursor_width * chars_max + 64, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.z += 9999
self.opacity = 0
@index = 0
@alphabet = $game_switches[SWITCH_ID] ? TEXT_ALPHABET : NUMBER_ALPHABET
refresh
update_cursor_rect
end
#-----------------------
def number
return @config.collect{ |i| @alphabet[i].chr }.join.strip if $game_switches[SWITCH_ID]
@config.collect{ |i| @alphabet[i].chr }.join.to_i
end
#-----------------------
def number=(number)
if $game_switches[SWITCH_ID] && number.is_a?(String) and number.length > 0
@config = number.split(//).collect {|chr| @alphabet.index(chr)}
elsif ( ! $game_switches[SWITCH_ID]) && number.is_a?(Integer)
@config = ("%0#{@config.length}d" % number).split(//).collect {|chr| chr.to_i }
end
refresh
end
#-----------------------
def update_cursor_rect
self.cursor_rect.set(@index * @cursor_width, 0, @cursor_width, 32)
end
#-----------------------
def update
super
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
@config[@index] = (@config[@index] + 1) % @alphabet.size
refresh
end
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
@config[@index] = (@config[@index] + @alphabet.size-1) % @alphabet.size
refresh
end
if Input.repeat?(Input::RIGHT)
if @config.size >= 2
$game_system.se_play($data_system.cursor_se)
@index = (@index + 1) % @config.size
end
end
if Input.repeat?(Input::LEFT)
if @config.size >= 2
$game_system.se_play($data_system.cursor_se)
@index = (@index + @config.length - 1) % @config.length
end
end
update_cursor_rect
end
#-----------------------
def refresh
self.contents.clear
self.contents.font.color = normal_color
for i in 0...@config.size
self.contents.draw_text(i * @cursor_width + 4, 0, 24, 32, @alphabet[@config[i]].chr)
end
end
end |
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Eh das war meine Idee, ich will Lizenzgebühren XD
Also die Idee finde ich so auch schöner, besonders weil man es überall nutzen kann, bloß dass man bei Texten auch bloß 6 Zeichen nutzen kann, finde ich etwas kurz, wenn man auf das Beispiel von vorhin zurück kommt.
aber dies kann man ja anpassen, dazu muss man bloß
verändern, allerdings wirkt das nur beim Text.
So weiterhin auf tolle Scripte.
Ave Abt
Also die Idee finde ich so auch schöner, besonders weil man es überall nutzen kann, bloß dass man bei Texten auch bloß 6 Zeichen nutzen kann, finde ich etwas kurz, wenn man auf das Beispiel von vorhin zurück kommt.
|
|
Quellcode |
1 2 3 4 5 6 7 |
<>Call Script: <setup_input(1, 9)> <>Message: "Passwort?" <>Bedingung: Script: <$game_variables[1] == "BLUTDURST"> : <>Message: "Okay, komm rein." sonst : <>Message: "Hau ab oder ich fress dich!" end |
aber dies kann man ja anpassen, dazu muss man bloß
|
|
Quellcode |
1 2 3 |
def initialize(chars_max)
chars_max = 20 if $game_switches[SWITCH_ID] #Anzahl der Zeichen
@config = Array.new(chars_max, 0) |
verändern, allerdings wirkt das nur beim Text.
So weiterhin auf tolle Scripte.
Ave Abt
Okay, das ist wirklich blöde-.-
Man kann zwar die Zeichenanzahl erhöhen, indem man mit
einen Text mit größerer Länge als Voreinstellung setzt, allerdings wird das Fenster durch einen Bug nicht entsprechend vergrößert, so dass die Zeichen am Ende nicht zu sehen sind.
Man kann zwar die Zeichenanzahl erhöhen, indem man mit
|
|
Quellcode |
1 |
$game_variables[VAR_ID] = " " |
einen Text mit größerer Länge als Voreinstellung setzt, allerdings wird das Fenster durch einen Bug nicht entsprechend vergrößert, so dass die Zeichen am Ende nicht zu sehen sind.
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Wozu denn eine Demo?
Wo hängst denn? Fehlermeldung? Zeile? Nur so kann dir geholfen werden.
Wo hängst denn? Fehlermeldung? Zeile? Nur so kann dir geholfen werden.
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
Zitat von »"typhoX"«
Naja bei mir kam erst ein Syntex Error, hab ich das nochmal eingefügt kam ich ins Spiel.
Dieses stürtzte aber immer ab, sobald ich ein Event mit dem Callscrip anklickte ohne Fehlermeldung.
Wieso Call Skript?
Die 2. Version braucht überhaupt kein Call Skript!
Einfach den Code der 2. Version über Main einfügen und dann so ein Event in der Art machen:
|
|
Quellcode |
1 2 3 4 5 |
<>Switch [0001] = ON <>Message: Sag mir was: <>Input Number: [0001], 8 Digits <>Message: Du hast \v[1] gesagt... <>Switch [0001] = OFF |
Mfg Monsta
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
Mh ich kriegs nicht richtig hin...
also das mit der Eingabe klappt alles. Aber was, wenn ich jetzt abfragen will ob das Passwort stimmt.
Wie frage ich die Variable nachdem ich das Passwort eingegeben habe ab ?
Außerdem würde ich das Script auch gerne am Anfang des Spieles nutzen, um den Spieler die Möglichkeit zu geben
den Heldennamen selbst zu bestimmen, doch wie soll das Event dazu aussehen ?
Danke im Vorraus...
also das mit der Eingabe klappt alles. Aber was, wenn ich jetzt abfragen will ob das Passwort stimmt.
Wie frage ich die Variable nachdem ich das Passwort eingegeben habe ab ?
Außerdem würde ich das Script auch gerne am Anfang des Spieles nutzen, um den Spieler die Möglichkeit zu geben
den Heldennamen selbst zu bestimmen, doch wie soll das Event dazu aussehen ?

Danke im Vorraus...


YAams
Random Signatur

