Oblicznie pozycji krat względem siatki. Pozycja myszy.

0

Witajcie mam problem, ponieważ posiadam taką plansze : (Plansza na dole!)
I chce zrobić coś takiego. |Jeżeli mysz jest nad daną kratką zrób to i to.|
Myślałem żeby zrobić coś typu

 
MouseState MStan = new MouseState();
if(MStan.X > liczba && MStan.X < liczba2 && MStan.Y > liczba3 && MStan.Y < liczba4)
{
Narysuj coś w tym miejscu;

}

Myślałem nad czymś takim, ale ilość "if" będzie równa 20 * 17 co stanowi wysoką liczbę, nie mówiąc o rozmiarze tablicy z zmiennymi. Mam pytanie czy dało by się to jakoś uskutecznić tzn. skrócić. Jeżeli tak, to w jakim kierunku to prowadzić.
I jeszcze jedno, mam do was pytanie odnośnie synchronizacji metody Update() z Draw(), ponieważ chcę zrobić że jeżeli mysz będzie w tym kwadracie narysuje się tam sprite. Myślałem nad tym żeby obiekty umieścić poza planszą i przenieść je do owego miejsca. Czy idę dobrą drogą ?

trawa.png

0

Myślałem nad czymś takim, ale ilość "if" będzie równa 20 * 17 co stanowi wysoką liczbę, nie mówiąc o rozmiarze tablicy z zmiennymi. Mam pytanie czy dało by się to jakoś uskutecznić tzn. skrócić. Jeżeli tak, to w jakim kierunku to prowadzić.

Użyć dzielenia?

kafelka_x = pozycja_myszki_x / szerokość_kafelki;
kafelka_y = pozycja_myszki_y / wysokość_kafelki;
0

@ref
Nie wierze żeby nikt nie korzystał z .XNA i nie wiedział jak to zrobić

0
ElementSiatki znajdzKrawendz(int x, int y) {
    static const int tolerancja = 5;
    static const int d = 30;
    int i, j, dx, dy;

    i = (x+tolerancja)/d;
    dx = (x+tolerancja)%d;
    j = (y+tolerancja)/d;
    dy = (y+tolerancja)%d;
 
    bool pion,poziom;
    pion = dx<=2*tolerancja;
    poziom = dy<=2*tolerancja;

    if (pion && poziom)
       return Skrzyzowanie(i,j);
    if (pion)
       return KeawedzPionowa(i, j);
    if (poziom)
       return KeawedzPozioma(i, j);
    return Srodek(i,j);
}
0

Chodzi mi o drugie pytanie, czyli synchronizacja Draw() z Update()

0

Szczerze nie rozumiem pytania.
To jest proste:
w zdarzeniu myszy analizujesz co zostało kliknięte i odpowiednio aktualizujesz model.
Model informuje widok, że coś się zmieniło, więc widok wywołuje na sobie update z odpowiednim obszarem do odświeżania.
Potem widok, próbuje się odrysować, w tym zdarzeniu powinieneś dostać jaki obszar jaki ma by odrysowany, więc na tej podstawie ustalasz zakres danych do odrysowania, iterujesz po nich i rysujesz je.
Zero gęstwiny ifów zaledwie parę pętl for.

1 użytkowników online, w tym zalogowanych: 0, gości: 1