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

Jak zaprogramować kliknięcia na obiekty w graficznym interfejsie?

Ostatnio zmodyfikowano 2013-11-28 18:21
Autor Wiadomość
Mitu
Temat założony przez niniejszego użytkownika
Jak zaprogramować kliknięcia na obiekty w graficznym interfejsie?
» 2013-11-25 22:09:40
Załóżmy, że tworzę grę lub program, polegającą np. na układaniu puzzli. Jaki jest najlepszy sposób do zaprogramowania wydarzeń związanych z przeciąganiem jednego z wielu elementów po planszy lub klikaniu na nie? Do każdego z obiektów po kolei wysłać typ wydarzenia i pozycję kursora i każdy z nich stwierdzałby, czy jest tym kliknięciem zainteresowany?
P-97510
DejaVu
» 2013-11-26 01:16:08
W zasadzie to nie ma najlepszego sposobu... wszystko zależy od implementacji jaką posiadasz w swojej aplikacji do obsługi myszy. W przypadku przeciągania obiektów to wystarczy zapamiętać puzzla w chwili, w której nastąpiła zmiana stanu przycisku myszy na wciśnięty i przyjąć, że ten zapamiętany puzzel ma tak długo podążać za myszą, dopóki klawisz myszy jest wciśnięty.
P-97531
Mitu
Temat założony przez niniejszego użytkownika
» 2013-11-26 01:24:09
Chodzi mi właśnie o to, jak zapamiętać puzzla. Czy to dobre rozwiązanie - wysłać każdemu pozycję myszy i każdy z nich przyrówna ją do swojego położenia i rozmiaru i wtedy da znać czy jest zainteresowany. Tak samo ze zwykłymi kliknięciami na elementy menu.
P-97534
DejaVu
» 2013-11-26 01:47:44
Dla każdego puzzla sprawdzaj czy mysz jest nad nim. W końcu raczej nie masz dużo puzzli. SFML ma np. metodę intersects w klasie sf::FloatRect. Jeżeli używasz innej biblioteki to możesz sobie ją w bardzo prosty sposób zaimplementować.
P-97536
pekfos
» 2013-11-26 12:26:24
SFML ma np. metodę intersects w klasie sf::FloatRect
Do sprawdzania punktu lepsze jest contains() i to dotyczy wszystkich rectów.
P-97560
braders
» 2013-11-27 20:01:57
Zrób klase puzel i pola "x,y,szerokosc,wysokosc" i sprawdzaj czy został wciśnięty guzik myszki jeśli tak sprawdzaj czy mysz znajduję się nad którymś puzzlem jeśli tak to przesuwaj puzzel za myszką.
P-97692
skovv
» 2013-11-27 20:12:49
Ja zazwyczaj robię tak:

C/C++
// Prostokąt
struct Rectangle {
    int X, Y, W, H;
    Rectangle( int x, int y, int w, int h ) {
        X = x; Y = y; W = w; H = h;
    }
};

// funkcja sprawdzająca kolizje
bool CollisionPoint( Rectangle * rc, int x, int y ) {
    if( x >= rc->X && x < rc->X + rc->W && y >= rc->Y && y < rc->Y + rc->H ) return true;
    else return false;
   
}

// Tworzenie kwadratu
Rectangle * Puzel = new Rectangle( 100, 100, 64, 64 );

if( MousePressLeft ) {
    if( CollisionPoint( Puzel, MouseX, MouseY ) ) cout << "Kliknąłeś!";
   
}
P-97694
braders
» 2013-11-27 20:24:51
@up
Poco mu tablica dynamiczna?
Puzzle zazwyczaj mają znaną liczbę części.
Ja bym zrobił na dwuwymiarowej tablicy,
np. tablica[9][9] i wtedy może sobie przyciągać puzzle do siatki.
P-97695
« 1 » 2
  Strona 1 z 2 Następna strona