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

[Allegro] problem z obsługą myszy.

Ostatnio zmodyfikowano 2010-09-12 21:40
Autor Wiadomość
tramwaj157
Temat założony przez niniejszego użytkownika
[Allegro] problem z obsługą myszy.
» 2010-09-12 19:36:40
Witam;]
piszę grafikę do szachów w bibliotece Allegro. mam problem z obsługą myszki.

C/C++
int nacisniete = 0;
while( !key[ KEY_ESC ] ) {
    if( mouse_b & 1 ) nacisniete = 1;
   
    if( !mouse_b & 1 && nacisniete == 1 ) {
        //tutaj myślę że jestem gdy kliknąłem myszką
    }
    nacisniete = 0; //jeśli to usunę to if wyżej się wykona..
   
}




to jest tylko taki przykład mojego rozumowania. do tego muszę jeszcze dodać miejsce kliknięcia etc. ale niestety to nie działa. jak wyżej napisałem, jeśli usunę tamtą linijkę to zadziała, ale tylko raz.
czy źle rozumuję?
proszę o odpowiedź.
Pozdrawiam!

btw. jak tutaj zacytowac? ;>
P-21932
DejaVu
» 2010-09-12 19:48:30
Co do cytowania: » KursyKurs STC kurs.
Co do klikania: zależy jaki konkretnie efekt chcesz wykonać i w którym miejscu planujesz jego obsługę. Generalnie polecam zrobić sobie jakąś flagę: 'przycisk został wciśnięty' i jeżeli masz stan:
C/C++
if( przycisk_zostal_wcisniety && obecny_przycisk == 0 )
{
    //obsługa akcji.
}

/edit:
Inna (prosta) opcja to:
C/C++
if( stary_przycisk != obecny_przycisk && obecny_przycisk == 1 )
{
    //obsługa akcji
}
P-21933
tramwaj157
Temat założony przez niniejszego użytkownika
» 2010-09-12 19:57:47
Właśnie chciałbym, żeby program dostaje sygnał, że kliknąłem myszkę, potem zczytuje współrzędne kliknięcia na bitmapie.
DejaVu co masz na myśli pisząc przycisk? jakiś obiekt klasy? właśnie myślałem nad tym, ale wtedy muszę zrobić 64 elementy, a tak jak pisałem wyżej byłoby prościej(tak mi się wydaje).
pozdrawiam!
P-21934
ison
» 2010-09-12 20:01:41
jeśli Cię dobrze zrozumiałem to:
C/C++
int nacisniete = 0;
while( !key[ KEY_ESC ] ) {
    if( mouse_b & 1 ) nacisniete = 1;
   
    if( !mouse_b & 1 && nacisniete == 1 ) {
        //jakies operacje
        nacisniete = 0; //to powinno się znajdować w tym ifie
    }
}
P-21935
DejaVu
» 2010-09-12 20:11:38
C/C++
int stary_przycisk = mouse_b;
while(...)
{
    int nowy_przycisk = mouse_b;
    //(...) jakiś kod
    if( nowy_przycisk != stary_przycisk && nowy_przycisk == 1 )
    {
        //wykonaj akcję
    } //if
    //(...) jakiś kod
    stary_przycisk = nowy_przycisk;
}
P-21936
tramwaj157
Temat założony przez niniejszego użytkownika
» 2010-09-12 20:12:43
Brawo!Działa.Nie wpadłem na to. ale jak to logicznie wytłumaczyć ?
P-21937
DejaVu
» 2010-09-12 20:14:22
Proste: jeżeli został naciśnięty klawisz - ustaw flagę.
jeżeli został puszczony klawisz (i flaga ustawiona) - wykonaj akcję i wyczyść flagę (to mowa o kodzie ison'a).
P-21938
tramwaj157
Temat założony przez niniejszego użytkownika
» 2010-09-12 20:17:16
Dzięki za pomoc :))

A jeszcze jeden problem napotkałem:

C/C++
int nacisniete = 0;
while( !key[ KEY_ESC ] ) {
    if( mouse_b & 1 ) nacisniete = 1;
   
    if( !mouse_b & 1 && nacisniete == 1 ) {
        //jakies operacje
        nacisniete = 0;
    }
}
sytuacja jest taka:
pobieram współrzędne myszki z pierwszego IFa, jak puszcze przycisk to w drugim IFie znowu sprawdzam współrzędne. Myślałem że współrzędne będą różne. jeśli przeciągam przyciśniętą myszkę to to się nie sprawdza;/ współrzędne z pierwszego ifa cały czas się aktualizują. Jest jakiś sposób żeby pobrać współrzędne naciśnięcia, żeby się nie zmieniały do czasu puszczenia przycisku ?
P-21939
« 1 » 2
  Strona 1 z 2 Następna strona