SFML i przechwytywanie znaków

O przechwytywaniu znaków z klawiatury i tworzeniu własnego „TextBox’a” w SFML.

Z pewnością wielu z Was chciałoby umożliwić graczowi podania np. swojego pseudonimu do tablicy wyników, albo do stworzenia profilu gracza o dowolnej nazwie (aby nie nazywać Slot 1, Slot 2, …). Jednakże jak się do tego zabrać?

W tym wpisie zajmiemy się przygotowaniem prostego kodu umożliwiającego użytkownikowi na wprowadzeniu tekstu z klawiatury, dodatkowo stworzymy ograniczenie ilości znaków jakie można wprowadzić oraz zabezpieczymy się przez wprowadzaniem niepożądanych przez nas znaków (np. znaków białych).

przechwytywanie-1

 

Implementacja


Proste przechwytywanie znaków

SFML umożliwia nam przechwytywanie znaków z klawiatury przy użyciu zdarzenia: TextEntered i najprostszy najbardziej ogólny kod służący do przechwytywania znaków może wyglądać mniej więcej w ten sposób.

To co tutaj widzimy to sprawdzenie czy wciśnięty znak ma wartość mniejszą niż 128 (czyli interesujące nas znaki, można zmniejszyć ten zakres, zalecam zajrzeć do tabeli Unicode aby dowiedzieć się jakie znaki mają jaki kod), następnie rzutujemy go na char (a zatem na ASCII) i dopisujemy go do obiektu string.

Oczywiście fajnie by było jeszcze widzieć, że faktycznie coś się dzieje po wciśnięciu klawiszy, więc po drobnych modyfikacjach kod prezentuje się następująco:

(pełny kod: gotowy do skopiowania, wklejenia i uruchomienia znajduje się na dole wpisu)

 

Ograniczenie ilości znaków

Dalsze modyfikacje są dość banalne i jak łatwo się domyślić tak można dość łatwo dodać maksymalną ilość znaków np w ten sposób:

 

Usuwanie znaków

Użytkownik może oczywiście zechcieć usunąć znak, całość można dość ładnie wszystko obsłużyć także wewnątrz TextEntered.

 

Wyłącznie standardowe znaki

Aby dopuścić do używania wyłącznie „normalnych” znaków, tzn liter i cyfr należy wprowadzić dozwolone przedziały: [48,57] + [65,90] + [97,122]. Aby dowiedzieć się skąd wzięły się te przedziały polecam zajrzeć na stronę z tabelą kodów unicode.

 

Kompletny kod

Dla leniwych poniżej przedstawiam kod zawierający wszystkie pokazane w tym wpisie featery. Kod jest gotowy do skopiowania, wklejenia i uruchomienia.

 

Posłowie


Dajcie znać co myślicie o tym wpisie, jeżeli chcielibyście rozwinięcia tego co zrobiliśmy lub chcielibyście zobaczyć więcej rzeczy tego typu (ciekawostek SFML, chociaż może być to także coś innego) to dajcie znać w komentarzach.

Code ON!