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

Tworzenie niskopoziomowego GUI - Algorytmy

Ostatnio zmodyfikowano 2017-05-31 20:20
Autor Wiadomość
captain
Temat założony przez niniejszego użytkownika
Tworzenie niskopoziomowego GUI - Algorytmy
» 2017-05-31 03:02:47
Cześć,
   Pisze tutaj ponieważ zamierzam dla swojej aplikacji stworzyć GUI. Używam biblioteki Allegro 5. Czy znacie jakąś literaturę, która opisuje te algorytmy?
Głównie chodzi mi o wykrycie najechania na przykładowy przycisk, czy został kliknięty itp. Za pomocą podstawowych sprawdzeń (x, y) itp. Domyśliłem się że trzeba użyć tutaj kolizji, aczkolwiek zielonego pojęcia nie mam jak zoptymalizować wykrycie dla dużej ilości box'ów.
P-161844
Rashmistrz
» 2017-05-31 10:48:24
Nie da się czasem do tej roboty zatrudnić systemu operacyjnego?
P-161849
captain
Temat założony przez niniejszego użytkownika
» 2017-05-31 11:53:41
Oczywiście że się da. Ale nie o to mi chodzi. Ponieważ użycie API systemu, zamyka aplikacje tylko na tej jednej rodzinie. Napisanie GUI własnoręcznie, pozwala na możliwość uruchamiania aplikacji na różnych rodzinach systemów.
P-161851
pekfos
» 2017-05-31 14:30:55
Głównie chodzi mi o wykrycie najechania na przykładowy przycisk, czy został kliknięty itp.
Sprawdzenie, czy kursor znajduje się na prostokącie, wyrównanym do osi układu współrzędnych, jest trywialne - wystarczy sprawdzić, czy obie współrzędne znajdują się w odpowiednich przedziałach. Wykrycie kliknięcia przycisku nie jest bardziej skomplikowane.
P-161858
captain
Temat założony przez niniejszego użytkownika
» 2017-05-31 16:40:54
Tak zgadzam się z Panem, znam tę metodę. Niestety tworząc GUI, czy to dla aplikacji czy gry. W przykładowej sekcji konfiguracji, gdzie wpisów może być naprawdę dużo. Sprawdzanie każdej możliwej kolizji, dla przycisków które aktualnie są wyświetlane jest mało optymalne. Nigdy wcześniej się tym nie zajmowałem, dlatego nie znam metod optymalizacyjnych.
P-161866
mateczek
» 2017-05-31 16:47:26
jak chcesz tworzyć GUI wieloplatformowe to skorzystaj z bibliotek wieloplatformowych sfml, qt, wxWidget itp itd. A bez odwołania się do systemu operacyjnego nawet pliku nie otworzysz. Jest nawet coś takiego jak allegro-gui choć jak widzę to strasznie brzydkie :P
P-161867
pekfos
» 2017-05-31 16:52:07
Możesz ograniczyć ilość sprawdzeń drzewem czwórkowym. Możesz praktycznie to samo zaimplementować bez użycia drzewa, tworząc tablicę dwuwymiarową wektorów wskaźników na kontrolki. Każda komórka odpowiada polu siatki, np 100x100 pikseli. Dostęp do pola masz w czasie stałym i potem tylko sprawdzasz 'kolizje' z tymi kontrolkami, które są wpisane jako nachodzące na te pole siatki.
Pytanie tylko czy to jest warte tyle zachodu. W końcu to nie jest gra, w której każdy obiekt może kolidować z każdym. Tu masz tylko kursor, jako kolidujący obiekt, a sam test jest bardzo szybki. Ile kontrolek upchasz w takiej sekcji konfiguracji? 100?
P-161868
captain
Temat założony przez niniejszego użytkownika
» 2017-05-31 17:22:58
@mateczek Wiem że jest taka możliwość za pomocą tych bibliotek. Bardziej problem w tym że ja programuję już 3 lata w czystym C, C++ nie znam. Na chwilę obecną znam C i podstawy Javy, gdzie zamierzam w bardzo bliskiej przyszłości zrobić przesiadkę na Jave. Tam akurat GUI to nie jest problem. Ale dziękuję za informacje.

@pekfos Dzięki za podpowiedź. Poczytam jeszcze o tym drzewie czwórkowym. Co do "tworząc tablicę dwuwymiarową wektorów wskaźników na kontrolki", przeszedł mi w myślach podobny pomysł. Zakładałem jeszcze przed napisaniem tego tematu, stworzenie tablicy dwuwymiarowej na rozmiar okna gdzie dla każdego pixela odpowiadałaby zmienna 2-Bajtowa w której byłoby wpisane ID elementu. Wtedy wykrywanie polegałoby na pobraniu ID z określonego (x, y) i wykonanie akcji, niestety kosztem pamięci RAM. Jednakże wolałem się dowiedzieć jakie mogą być jeszcze sposoby na to.
Tak masz racje, elementów może nie być dużo i szybkość nie jest pierwszoplanowa. Aczkolwiek zawsze najpierw staram się wyznaczyć najoptymalniejsze metody, nawyk z programowania mikrokontrolerów.
P-161869
« 1 » 2
  Strona 1 z 2 Następna strona