Hier will ich euch mein Textbox Script vorstellen, dass ich aufgrund Anfragen und nicht Idealster Lösung geschrieben habe. Obwohl Textboxen sehr Wichtig sind, greifen die meisten auf get_string zu. Es gibt zwar schon einige Textboxen Scripte aber diese benutzen dann meist keyboard_string, was drei Nachteile hat: 1. Man kann nicht in der Mitte des Textes schreiben 2. Es kann nur eine einzige Textbox verwendet werden 3. Es enthält alle zuletzt getippten Zeichen(Kann man Theoretisch umgehen).
Welche Vorteile hat dieses Script:
Die Argumente sind wie folgt(Auch als Komentar im Script):
argument0 | X Position(Standard x)
argument1 | Y Position(Standard y)
argument2 | Grafik der Textbox
argument3 | Maximale Textlänge
argument4 | Voreingestellter Text
Mit Strg+X / Strg+C / Strg+V lässt sich wie gewohnt der Text ausschneiden/kopieren und einfügen.
Als Rückgabe Wert wird der Text ausgegeben (Eigentlich sinnlos da die Variable TEXT den text schon beinhaltet).
Script:
Alt:
Spoiler anzeigen
Alles anzeigen
Neu:
Alles anzeigen
Neuerungen:
Löschen der Buchstaben lassen sich nun auch durch gedrückt halten der Backspacetaste.
Grafik ändert sich jetzt durch den Focus. Falls es eine Animation bleiben soll, ersetze in Line 130 FOCUS durch -1.
Der Script ist zwar noch in Entwicklung, kann aber schon richtig verwendet werden. Und ich rate ab # zu schreiben, es wird zwar angezeigt aber es geschehen dann seltsame Dinge (Ich hab da so eine Vermutung).
Und zum Schluss noch ein einfaches Beispiel für ein Passwortprogramm. (Erneuert)
Für Fragen, Wünsche, Kommentare bin ich gerne bereit.
Welche Vorteile hat dieses Script:
- Es hat einen Focus
- Man Kann an einer beliebigen Stellen schreiben. Kann mit dem Pfeiltasten und mit der Maus
gewählt werden.
- Man kann den Text Kopieren, Ausschneiden, Einfügen(An der Stelle des Zeigers).
- Automatische Anpassung der Textbox.
- Beliebige Anzahl an Textboxen(Für jede ein Objekt da sie sich keine Variable teilen können.)
Die Argumente sind wie folgt(Auch als Komentar im Script):
argument0 | X Position(Standard x)
argument1 | Y Position(Standard y)
argument2 | Grafik der Textbox
argument3 | Maximale Textlänge
argument4 | Voreingestellter Text
Mit Strg+X / Strg+C / Strg+V lässt sich wie gewohnt der Text ausschneiden/kopieren und einfügen.
Als Rückgabe Wert wird der Text ausgegeben (Eigentlich sinnlos da die Variable TEXT den text schon beinhaltet).
Script:
Alt:
GML-Quellcode
- //////////////////////////////////////////////////
- // Mit diesem Script kannst du eine //
- // Textbox drawen lassen und //
- // deren Wert Einlesen //
- //////////////////////////////////////////////////
- /////////////// Made by Chris987 /////////////////
- // Argumente //
- /*
- Flag 0 | Die X Position
- Flag 1 | Die Y Position
- Flag 2 | Die Textbox Grafik
- Flag 3 | Maximale Zeichen
- Flag 4 | Voreingestellter Text
- */
- ///////////// Variablen Vorbereiten //////////////
- if not(variable_local_exists("TEXT")) //Prüft ob schon der Text vorhanden ist.
- TEXT = argument4 //Erstelle eine Var mit dem voreingestellten Text.
- if not(variable_local_exists("FOCUS")) //Prüft ob schon ein Focus zugewiesen wurde.
- FOCUS = false //Erstelle eine Var mit dem Wert false.
- if not(variable_local_exists("ZEIGER"))//Prüft ob der Zeiger schon existiert.
- ZEIGER = 0 //Setze den Zeiger auf 0.
- if not(variable_local_exists("backspace_friction"))//Prüft ob der Zeiger schon existiert.
- backspace_friction = 0 //Setze den Zeiger auf 0.
- ////////////// Eingabe und Zeugs /////////////////
- if(mouse_check_button(mb_any)) //Checkt ob eine Maustaste gedrückt wird.
- if(mouse_x > argument0 and mouse_x < argument0 + string_width(string_repeat('A',argument3)) and //Prüft ob sich die Maus(X) im Bereich befindet.
- mouse_y > argument1 and mouse_y < argument1 + string_height('A')){ //Prüft ob sich die Maus(Y) im Bereich befindet.
- FOCUS = true //Der Focus wird aktiviert
- var i;
- for(i=0;i<=string_length(TEXT);i+=1)//Durchgeht die Buchstaben um herauszufinden wo der Zeiger gesetzt wird.
- {
- if(i==string_length(TEXT))
- ZEIGER = i
- else
- {
- //if(mouse_x+(string_width(string_char_at(TEXT,i+1))/2) >= string_width(string_copy(TEXT,0,i))+argument0)//Nach dem
- if(mouse_x+(string_width(string_char_at(TEXT,i))/2) <= string_width(string_copy(TEXT,0,i+1))+argument0)//Vor dem
- {
- ZEIGER = i //Dann RICHTIG
- break;
- }
- }
- }
- }
- else
- FOCUS = false //Der Focus wird deaktiviert
- if(FOCUS){ //Wenn der Focus Aktiv ist dann kann der Text eingegeben werden.
- if(keyboard_check(vk_control)) //Wenn strg gedrückt wird...
- if(keyboard_check_pressed(vk_anykey)) //Ist dazu da dass es nur einmal passiert wenn man eine Taste drückt.
- switch(keyboard_key)
- {
- case ord('C'): clipboard_set_text(TEXT) break; //Text in die Zwischenablage kopieren.
- case ord('V'): if(clipboard_has_text())
- {
- TEXT = string_insert(clipboard_get_text(),TEXT,ZEIGER+1);
- ZEIGER += string_length(clipboard_get_text()); break; //Text aus der Zwischenablage am Zeiger einfügen.
- }
- case ord('X'): clipboard_set_text(TEXT); TEXT = ""; ZEIGER = 0 break; //Text wird Ausgeschnitten
- }
- //Löscht den Text durch drücken von entf.
- if(keyboard_check_released(vk_delete))
- {
- TEXT = ""
- ZEIGER = 0
- }
- //Bewegt den Zeiger nach links.
- if(keyboard_check_pressed(vk_left))
- if not(ZEIGER<=0)
- ZEIGER -= 1
- //Bewegt den Zeiger nach Rechts.
- if(keyboard_check_pressed(vk_right))
- if not(ZEIGER>=string_length(TEXT))
- ZEIGER += 1
- if not(keyboard_check(vk_control))
- if(keyboard_check_pressed(vk_anykey))
- if((keyboard_key >= 48 and keyboard_key <= 90) or keyboard_check(vk_space) or (keyboard_key >= 186 and keyboard_key <= 222))//Gültige Werte
- if not(string_length(TEXT) >= argument3)
- {
- TEXT = string_insert(keyboard_lastchar,TEXT,ZEIGER+1)//Schreibt den Buchstaben an der Position des Zeigers
- ZEIGER += 1
- }
- if(keyboard_check(vk_backspace))
- if not(ZEIGER == 0)
- {
- backspace_friction += 1
- if(backspace_friction >= room_speed / 9 or keyboard_check_pressed(vk_backspace))
- {
- TEXT = string_delete(TEXT,ZEIGER,1)//Löscht das Zeichen an der Position des Zeigers.
- ZEIGER -= 1
- backspace_friction = 0
- }
- }
- if(keyboard_check_released(vk_backspace))
- backspace_friction = 0
- }
- //////////// Textbox wird gezeichnet //////////////
- draw_sprite_stretched(argument2,FOCUS,argument0,argument1,string_width(string_repeat('A',argument3)),string_height('A'))
- draw_text(argument0,argument1,string_replace_all(TEXT,"#","\#"))
- if(FOCUS)
- draw_line(string_width(string_copy(TEXT,0,ZEIGER))+argument0,argument1,string_width(string_copy(TEXT,0,ZEIGER))+argument0,argument1+string_height('ß'))
- //Und zum Schluss den Text Zurückgeben lassen(Was eigentlich Total Sinnlos ist)
- return TEXT;
Neu:
GML-Quellcode
- //////////////////////////////////////////////////
- // Mit diesem Script kannst du eine //
- // Textbox drawen lassen und //
- // deren Wert Einlesen //
- //////////////////////////////////////////////////
- /////////////// Made by Chris987 /////////////////
- // Argumente //
- /*
- Flag 0 | Die X Position
- Flag 1 | Die Y Position
- Flag 2 | Die Textbox Grafik
- Flag 3 | Maximale Zeichen
- Flag 4 | Voreingestellter Text
- */
- ///////////// Variablen Vorbereiten //////////////
- if not(variable_local_exists("TEXT")) //Prüft ob schon der Text vorhanden ist.
- TEXT = argument4 //Erstelle eine Var mit dem voreingestellten Text.
- if not(variable_local_exists("FOCUS")) //Prüft ob schon ein Focus zugewiesen wurde.
- FOCUS = false //Erstelle eine Var mit dem Wert false.
- if not(variable_local_exists("ZEIGER"))//Prüft ob der Zeiger schon existiert.
- ZEIGER = 0 //Setze den Zeiger auf 0.
- if not(variable_local_exists("Blink"))//Prüft ob Blink schon existiert.
- Blink = true //Setze Blink auf 0.
- if not(variable_local_exists("TMBL"))//Prüft ob Blink schon existiert.
- TMBL = 0 //Setze Blink auf 0.
- if not(variable_local_exists("backspace_friction"))//Prüft ob der Zeiger schon existiert.
- backspace_friction = 0 //Setze den Zeiger auf 0.
- ////////////// Eingabe und Zeugs /////////////////
- if(mouse_check_button(mb_any)) //Checkt ob eine Maustaste gedrückt wird.
- if(mouse_x > argument0 and mouse_x < argument0 + string_width(string_repeat('A',argument3)) and //Prüft ob sich die Maus(X) im Bereich befindet.
- mouse_y > argument1 and mouse_y < argument1 + string_height('A')){ //Prüft ob sich die Maus(Y) im Bereich befindet.
- FOCUS = true //Der Focus wird aktiviert
- var i;
- for(i=0;i<=string_length(TEXT);i+=1)//Durchgeht die Buchstaben um herauszufinden wo der Zeiger gesetzt wird.
- {
- if(i==string_length(TEXT))
- ZEIGER = i
- else
- {
- //if(mouse_x+(string_width(string_char_at(TEXT,i+1))/2) >= string_width(string_copy(TEXT,0,i))+argument0)//Nach dem
- if(mouse_x+(string_width(string_char_at(TEXT,i))/2) <= string_width(string_copy(TEXT,0,i+1))+argument0)//Vor dem
- {
- ZEIGER = i //Dann RICHTIG
- break;
- }
- }
- }
- }
- else
- FOCUS = false //Der Focus wird deaktiviert
- if(FOCUS){ //Wenn der Focus Aktiv ist dann kann der Text eingegeben werden.
- if(keyboard_check(vk_control)) //Wenn strg gedrückt wird...
- if(keyboard_check_pressed(vk_anykey)) //Ist dazu da dass es nur einmal passiert wenn man eine Taste drückt.
- switch(keyboard_key)
- {
- case ord('C'): clipboard_set_text(TEXT) break; //Text in die Zwischenablage kopieren.
- case ord('V'): if(clipboard_has_text())
- {
- TEXT = string_insert(clipboard_get_text(),TEXT,ZEIGER+1);
- ZEIGER += string_length(clipboard_get_text()); break; //Text aus der Zwischenablage am Zeiger einfügen.
- }
- case ord('X'): clipboard_set_text(TEXT); TEXT = ""; ZEIGER = 0 break; //Text wird Ausgeschnitten
- }
- //Löscht den Text durch drücken von entf.
- if(keyboard_check_released(vk_delete))
- {
- TEXT = ""
- ZEIGER = 0
- }
- //Bewegt den Zeiger nach links.
- if(keyboard_check_pressed(vk_left))
- if not(ZEIGER<=0)
- ZEIGER -= 1
- //Bewegt den Zeiger nach Rechts.
- if(keyboard_check_pressed(vk_right))
- if not(ZEIGER>=string_length(TEXT))
- ZEIGER += 1
- if not(keyboard_check(vk_control))
- if(keyboard_check_pressed(vk_anykey))
- if((keyboard_key >= 48 and keyboard_key <= 90) or keyboard_check(vk_space) or (keyboard_key >= 186 and keyboard_key <= 222))//Gültige Werte
- if not(string_length(TEXT) >= argument3)
- {
- TEXT = string_insert(keyboard_lastchar,TEXT,ZEIGER+1)//Schreibt den Buchstaben an der Position des Zeigers
- ZEIGER += 1
- }
- if(keyboard_check(vk_backspace))
- if not(ZEIGER == 0)
- {
- backspace_friction += 1
- if(backspace_friction >= room_speed / 9 or keyboard_check_pressed(vk_backspace))
- {
- TEXT = string_delete(TEXT,ZEIGER,1)//Löscht das Zeichen an der Position des Zeigers.
- ZEIGER -= 1
- backspace_friction = 0
- }
- }
- if(keyboard_check_released(vk_backspace))
- backspace_friction = 0
- }
- ///////// Bringt den Zeiger zum Blinken ///////////
- TMBL += 1
- if(TMBL >= 15)
- {
- TMBL = 0
- if Blink
- Blink = false
- else
- Blink = true
- }
- //////////// Textbox wird gezeichnet //////////////
- draw_sprite_stretched(argument2,FOCUS,argument0-2,argument1-2,string_width(string_repeat('a',argument3)),string_height('A')+4)
- draw_text(argument0,argument1,string_replace_all(TEXT,"#","\#"))
- if(FOCUS)
- if(Blink)
- draw_line(string_width(string_copy(TEXT,0,ZEIGER))+argument0,argument1,string_width(string_copy(TEXT,0,ZEIGER))+argument0,argument1+string_height('ß'))
Neuerungen:
Löschen der Buchstaben lassen sich nun auch durch gedrückt halten der Backspacetaste.
Grafik ändert sich jetzt durch den Focus. Falls es eine Animation bleiben soll, ersetze in Line 130 FOCUS durch -1.
Der Script ist zwar noch in Entwicklung, kann aber schon richtig verwendet werden. Und ich rate ab # zu schreiben, es wird zwar angezeigt aber es geschehen dann seltsame Dinge (Ich hab da so eine Vermutung).
Und zum Schluss noch ein einfaches Beispiel für ein Passwortprogramm. (Erneuert)
Für Fragen, Wünsche, Kommentare bin ich gerne bereit.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Chris987 () aus folgendem Grund: Script Erneuerung