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
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Czy uzytkownik wcisnal klawisz?
Autor Wiadomość
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 15-10-2011, 13:14   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.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 15-10-2011, 14:10   

http://www.cprogramming.com/fod/kbhit.html
_________________
1Tbps Project && Telecomix Network

 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 15-10-2011, 14:47   

Ale żeś mi pomógł...
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 15-10-2011, 15:12   

No i udowodniłeś brak umiejętności myślenia. A później się dziwisz dlaczego nazywam Cię konsumpcjonistą...
_________________
1Tbps Project && Telecomix Network

 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 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.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 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.
_________________
1Tbps Project && Telecomix Network

 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 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.
_________________
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012