Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Metoda jak std::cin, ale w Allegro

Ostatnio zmodyfikowano 2015-02-28 14:26
Autor Wiadomość
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.
P-126424
SeaMonster131
» 2015-02-12 15:40:03
Napisz sam albo użyj jakiegoś GUI np. » KursyKurs Allegro 4.x GUI, C++ kurs
P-126428
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.
P-126442
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.
P-126954
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:

C/C++
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. ;)
P-127064
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
P-127069
DejaVu
» 2015-02-28 14:26:37
http://cpp0x.pl/dokumentacja​/Allegro-4-4/readkey/380

Frazy, które należy wpisać w wyszukiwarkę google:
P-127490
« 1 »
  Strona 1 z 1