Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

C, C#, C++ - Czy uzytkownik wcisnal klawisz?

Simbax - 15-10-2011, 13:14
Temat postu: Czy uzytkownik wcisnal klawisz?
Znowu ja i moje nieumiejętne szukanie. Tym razem chcę, żeby wykonywał się pewien kawałek kodu co pewien czas (dokładnie - co sekundę), ale jeśli w trakcie zostanie naciśnięty odpowiedni klawisz to zanim to wykona zrobi coś jeszcze. Prościej: ma wyświetlać co sekundę na ekranie wartość, która się zmienia, a w razie naciśnięcia np. 1 coś w niej zmienić. To kawałek kodu:

Kod:
for(;;)
    {
        system("cls");
        cout << "Aktualna predkosc: " << Pojazd.fPredkosc() << " m/s" << endl << endl;
        cout << "1 - przyspiesz 2 - zwolnij 3 - zatrzymaj";
                Sleep(1000);
        ch=getch();
        if (ch == '1') Pojazd.Przyspiesz(1);
        if (ch == '2') Pojazd.Zwolnij(1);
        if (ch == '3') Pojazd.Zwolnij(Pojazd.fPrzyspieszenie());
    }


Wiem, że to jest źle, próbowałem coś wykombinować, ale jakoś nie mogę na nic wpaść. Po prostu getch() będzie się wykonywać tak długo dopóki nie dostanie znaku, tu jest problem.

adiblol - 15-10-2011, 14:10

http://www.cprogramming.com/fod/kbhit.html
Simbax - 15-10-2011, 14:47

Ale żeś mi pomógł...
adiblol - 15-10-2011, 15:12

No i udowodniłeś brak umiejętności myślenia. A później się dziwisz dlaczego nazywam Cię konsumpcjonistą...
Simbax - 15-10-2011, 15:31

Ależ ty jesteś mądry. Dałeś linka do jakiegoś tekstu, który nie dość że jest po angielsku, to jeszcze za wiele mi nie dał, bo nawet z wykorzystaniem tego czegoś nie mogę tego problemu rozwiązać, chyba że mam kazać wcisnąć przycisk dwa razy. ekhem... idiota... ekhem...

[ Dodano: 15-10-2011, 15:46 ]
No dobra działa, szkoda tylko, że nikt nigdzie nie napisał pewnej ważnej rzeczy, tylko dał linka, bo jest "ekspertem". Więc niech ktoś taki naprawdę inteligentny mi wyjaśni jakim cudem to działa:
Sleep(1000);
system("cls");
cout << "Aktualna predkosc: " << Pojazd.fPredkosc() << " m/s" << endl << endl;
cout << "1 - przyspiesz 2 - zwolnij 3 - zatrzymaj";
if (kbhit()!=0)
{
ch=getch();

if (ch == '1') Pojazd.Przyspiesz(1);
if (ch == '2') Pojazd.Zwolnij(1);
if (ch == '3') Pojazd.Zwolnij(Pojazd.fPrzyspieszenie());
}

[ Dodano: 15-10-2011, 15:57 ]
Dobra, chyba już rozumiem.

adiblol - 15-10-2011, 15:58

Simbax napisał/a:
Ale żeś mi pomógł...
Czy takie zdanie informuje mnie czego nie rozumiesz? W czym mam pomóc dodatkowo?

Simbax napisał/a:
który nie dość że jest po angielsku
Nie pogrążaj się... Jeżeli rozumiesz menu Minecrafta to nie powinieneś mieć problemu z dokumentacją techniczną.

Simbax napisał/a:
if (kbhit()!=0)
{
ch=getch();
Normalnie. kbhit() zwraca 0 jeżeli użytkownik nic nie wcisnął, wtedy zgodnie z if'em nie jest użyty getch bo gdyby został użyty to by zablokował program.
Berserker - 15-10-2011, 18:25

Poczytaj o funkcji GetAsyncKeyState(). Sposobow na odczyt klawiszy jest wiele, GetAsyncKeyState() jest chyba najprostsze, najwydajniejsze jest po prostu zalozenie hooka na klawiature, ale ja nie rozumiem, jak hooki dzialaja wiec trzymam sie tej funkcji :)

Angielski nie powinien byc problemem, wiekszosc stron angielskich jest duzo lepsza od ich polskich odpowiednikow, wiec jesli nie umiesz angielskiego na poziomie conajmniej intermediate to czas sie uczyc.


Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group