[Allegro] Metoda jak std::cin, ale w Allegro
Ostatnio zmodyfikowano 2015-02-28 14:26
Brunon3 Temat założony przez niniejszego użytkownika |
[Allegro] Metoda jak std::cin, ale w Allegro » 2015-02-12 14:51:06 Witam, otóż mam problem: Jak w C++ na Allegro 4.2 zrobić wpisywanie tekstu, coś ja std::cin w aplikacjach okienkowych? Jest to mi bardzo potrzebne, bo piszę gierkę RTS. Proszę o zwięzłą odpowiedź, najlepiej zawierającą link/linki do odpowiednich metod w dokumentacji. ;) Pozdrawiam. |
|
SeaMonster131 |
» 2015-02-12 15:40:03 |
|
Brunon3 Temat założony przez niniejszego użytkownika |
» 2015-02-12 19:33:50 Sprawdziłem, ale czy mogę prosić o coś bardziej ukierunkowanego? ;) Np jakąś jedną metodę która zastępuje std::cin i która nie wymaga zmieniania struktury aplikacji. :) Pozdrawiam. |
|
pekfos |
» 2015-02-21 14:13:08 Np jakąś jedną metodę która zastępuje std::cin i która nie wymaga zmieniania struktury aplikacji. :) |
Poza złymi rozwiązaniami, raczej nie. Zaimplementuj samemu, na eventach. |
|
Brunon3 Temat założony przez niniejszego użytkownika |
» 2015-02-22 12:47:23 Wkleiłem to już w innym temacie ale tu też wkleję. :) Oto rozwiązanie: void App::readKey( std::string & text, bool ON ) { if( textOn && ON ) { if( key[ KEY_Q ] ) { text = text + "Q"; textOn = false; } if( key[ KEY_W ] ) { text = text + "W"; textOn = false; } if( key[ KEY_E ] ) { text = text + "E"; textOn = false; } if( key[ KEY_R ] ) { text = text + "R"; textOn = false; } if( key[ KEY_T ] ) { text = text + "T"; textOn = false; } if( key[ KEY_Y ] ) { text = text + "Y"; textOn = false; } if( key[ KEY_U ] ) { text = text + "U"; textOn = false; } if( key[ KEY_I ] ) { text = text + "I"; textOn = false; } if( key[ KEY_O ] ) { text = text + "O"; textOn = false; } if( key[ KEY_P ] ) { text = text + "P"; textOn = false; } if( key[ KEY_A ] ) { text = text + "A"; textOn = false; } if( key[ KEY_S ] ) { text = text + "S"; textOn = false; } if( key[ KEY_D ] ) { text = text + "D"; textOn = false; } if( key[ KEY_F ] ) { text = text + "F"; textOn = false; } if( key[ KEY_G ] ) { text = text + "G"; textOn = false; } if( key[ KEY_H ] ) { text = text + "H"; textOn = false; } if( key[ KEY_J ] ) { text = text + "J"; textOn = false; } if( key[ KEY_K ] ) { text = text + "K"; textOn = false; } if( key[ KEY_L ] ) { text = text + "L"; textOn = false; } if( key[ KEY_Z ] ) { text = text + "Z"; textOn = false; } if( key[ KEY_X ] ) { text = text + "X"; textOn = false; } if( key[ KEY_C ] ) { text = text + "C"; textOn = false; } if( key[ KEY_V ] ) { text = text + "V"; textOn = false; } if( key[ KEY_B ] ) { text = text + "B"; textOn = false; } if( key[ KEY_N ] ) { text = text + "N"; textOn = false; } if( key[ KEY_M ] ) { text = text + "M"; textOn = false; } } if( key[ KEY_SPACE ] && textOn ) { text = text + " "; textOn = false; } if( !key[ KEY_SPACE ] && !key[ KEY_Q ] && !key[ KEY_W ] && !key[ KEY_E ] && !key[ KEY_R ] && !key[ KEY_T ] && !key[ KEY_Y ] && !key[ KEY_U ] && !key[ KEY_I ] && !key[ KEY_O ] && !key[ KEY_P ] && !key[ KEY_A ] && !key[ KEY_S ] && !key[ KEY_D ] && !key[ KEY_F ] && !key[ KEY_G ] && !key[ KEY_H ] && !key[ KEY_J ] && !key[ KEY_K ] && !key[ KEY_L ] && !key[ KEY_Z ] && !key[ KEY_X ] && !key[ KEY_C ] && !key[ KEY_V ] && !key[ KEY_B ] && !key[ KEY_N ] && !key[ KEY_M ] ) textOn = true; if( key[ KEY_BACKSPACE ] || key[ KEY_DEL ] ) { text.erase(); } }
Wiem że dość prymitywne ale nie umiem zrobić lepszego. ;) |
|
pekfos |
» 2015-02-22 13:30:42 Wiem że dość prymitywne ale nie umiem zrobić lepszego. ;) |
Huh, aż strach pomyśleć, ile razy krócej da się to zapisać.. ;). Trochę głupio by było ze strony twórców allegro, gdyby KEY_A, KEY_B, etc nie były kolejnymi liczbami. Jeśli są, wtedy większość tego kodu można zapisać jednym wyrażeniem arytmetycznym.. A jeśli nie, to też, ale to już wymagało by dodania dodatkowej tablicy - dalej o wiele krócej |
|
DejaVu |
» 2015-02-28 14:26:37 |
|
« 1 » |