Programowanie > Literatura

Programowanie prostego interfacu

(1/1)

zarius:
Witam,

Mam taka propozycje art'a. Wiem ze kazdy pisze to na co ma w danym momencie ochote lub czym akurat sie zajmuje ale nie znalazlem za duzo interesujacych artykolow po polsku jak pisac interfejs uzytkownika np w ogl lub directx (to akurat mnie by interesowalo) Chodzi mi tez jak do tego sie w ogole zabrac. Kiedys widzialem post Krzyska K. w ktorym napisal ze stworzenie prostego interfacu na potrzeby jakiejs gierki jest banalny a z checia bym sie dowiedzial jak w to sie wgryzc. No i jesli istnieje jakis super art na taki temat to gdzie mozna go znalesc ?! (a moze byc juz nawet i po angielsku jest tego warty) no chyba ze ktos ma ochote taki art napisac :)

Pozdrawiam,
Zarius

Master Ar2ro:
Wydaje mi się, że należałoby tu rozdzielić dwa elementy - mianowicie strukture interfejsu użytkownika i przedstawianie go na ekranie przy użyciu jednego z API.

Struktura interfejsu graficznego, to po prostu definicje klas (lub jedynie struktur) zawierających położenie obiektu, jego rozmiar, być może rodzaj, elementy składowe (jak tekst, kolor, obrazek itp), czy jest aktywne oraz podelementy (np. jeżeli jest to okno, to może mieć przyciski, itp). Tyle.

Komunikacja z użytkownikiem, to dowolne wybrane przez Ciebie API wykorzystywane do odbierania kliknięcia myszką lub klawiszy z klawiatury, sprawdzanie, w którym miejscu użytkownik kliknął i wykonywanie operacji (zmiana aktywnego elementu, wciśnięcie przcisku, itp) oraz, jeżeli jest aktywne pole edycyjne to wczytywanie klawiszy z klawiatury...

No i rysowanie. Tutaj to już całkowita dowolność, taki interfejs użytkownika możesz przedstawić w formie czysto tekstowej w konsoli, utworzyć do niego odpowiednie kontrolki używając WinAPI (lub odpowiednika pod Linuxem) lub narysować samemu używając dowolnej biblioteki.

Tak więc Krzysiek K. (zgodnie z tym, co przytoczyłeś) miał rację co do tego, że prosty (co trzeba podkreślić) interfejs użytkownika to na prawdę banalna sprawa. Co innego, jeżeli ma on zawierać jakieś ogromne ilości dostępnych kontrolek, czy ekstra konfigurowalność. Ale najprostrzy interfejs (czyli jedynie przycisk, pole edycyjne i pole wyboru - nawet okna nie są potrzebne) to niewiele pracy.

zarius:

--- Cytat: Master Ar2ro w Luty 05, 2006, 22:35:29 ---Wydaje mi się, że należałoby tu rozdzielić dwa elementy - mianowicie strukture interfejsu użytkownika i przedstawianie go na ekranie przy użyciu jednego z API.

Struktura interfejsu graficznego, to po prostu definicje klas (lub jedynie struktur) zawierających położenie obiektu, jego rozmiar, być może rodzaj, elementy składowe (jak tekst, kolor, obrazek itp), czy jest aktywne oraz podelementy (np. jeżeli jest to okno, to może mieć przyciski, itp). Tyle.

Komunikacja z użytkownikiem, to dowolne wybrane przez Ciebie API wykorzystywane do odbierania kliknięcia myszką lub klawiszy z klawiatury, sprawdzanie, w którym miejscu użytkownik kliknął i wykonywanie operacji (zmiana aktywnego elementu, wciśnięcie przcisku, itp) oraz, jeżeli jest aktywne pole edycyjne to wczytywanie klawiszy z klawiatury...

No i rysowanie. Tutaj to już całkowita dowolność, taki interfejs użytkownika możesz przedstawić w formie czysto tekstowej w konsoli, utworzyć do niego odpowiednie kontrolki używając WinAPI (lub odpowiednika pod Linuxem) lub narysować samemu używając dowolnej biblioteki.

Tak więc Krzysiek K. (zgodnie z tym, co przytoczyłeś) miał rację co do tego, że prosty (co trzeba podkreślić) interfejs użytkownika to na prawdę banalna sprawa. Co innego, jeżeli ma on zawierać jakieś ogromne ilości dostępnych kontrolek, czy ekstra konfigurowalność. Ale najprostrzy interfejs (czyli jedynie przycisk, pole edycyjne i pole wyboru - nawet okna nie są potrzebne) to niewiele pracy.

--- Koniec cytatu ---

Spoko, dzieki :) Od 2 dni katuje ksiazke o programowaniu interfacu z uzyciem DirectX i musze przyznac ze az tak strasznie to sie nie rozni od tego w co sie bawilem uczac C++ kilka miesiecy temu (UI dla konsoli windows :P zakonczylem na dwoch "kontrolkach" menu i button i mialem dziwne problemy i zdecydowalem ze to bez sensu bo itak sie takich rzeczy do niczego nie uzywa :P) tyle ze bardziej rozbudowane. Nauczylem sie jak do tej pory kilku waznych aspektow ktore wczesniej mi jakos umknely (listy polaczone) i ogolnie przyjemna lektura a material zawarty w ksiazce pozwala na stworzenie nie az tak bardzo banalnego GUI. Miedzy innymi Child Window z mozliwoscia minimalizacji przenoszenia i tak dalej :P (narazie do tego tylko doszedlem) Takze chyba bede pierwszy kto taki art tutaj by napisal bo chetnych nie ma a moze sie komus przyda :P Kilka tygodni i bede mial tworzenie interface'ow opanowane x) ;)

Krzysiek K.:
Jeżeli chodzi o prosty interface - często wystarczy pojedyncza klasa CButton i jakiś manager do tego. Manager trzyma wektor wstaźników do przycisków, a przyciski pamiętają swoje położenie na ekranie i potrafią się wyświetlić (np. mają wskaźnik na teksturę, którą rozciągają na cały swój obszar). Manager ma dwie głowne metody - Render i OnClick plus parę dodatkowych do dodawania i usuwania przycisków. Render po prostu wyświetla wszystkie przyciski, a OnClick znajduje przycisk zawierający przekazane współrzędne i wywołuje metodę OnClick odpowiedniego przycisku. To, w jaki sposób reaguje przycisk to już kwestia gustu - może mieć jakiś wskaźnik na funkcję, którą wywołuje, wskaźnik na jakiś interface wstylu IClickResponder, albo można po prostu odziedziczyć po CButton i zaimplementować tam odpowiednio OnClick - wszystkie te rozwiązania są tak samo dobre, tyle że każde komu innemu pasuje. Z wywoływaniem OnClick dla managera program już musi sobie poradzić sam (to jest już zależne od tego, jak w danym przypadku została zrobiona obsługa myszy).

Wiem, że to bardzo prosty interface, ale przecież o taki chodziło - do menu w grze w sam raz. :) Oczywiście można to nieco rozwinąć, dodać nowe kontrolki, itp, ale złożoność systemu nadal jest niewielka. :)

zarius:

--- Cytuj ---Wiem, że to bardzo prosty interface, ale przecież o taki chodziło - do menu w grze w sam raz.
--- Koniec cytatu ---
Akurat o to chodzilo ze interface wcale nie ma byc taki prosty. Chce zaimplementowac oddzielny modul odpowiedzialny za kontrolki w moim FrameWorku ktory jak znam zycie bede przepisywal jeszcze 5-6 razy (tak jak czytam temat o tym managarze zasobow to nawet nie wiem po co mi to i jak sie za to zabrac :P wiec pewnie dlatego mam takie wrazenie) ale chcialbym miec chociaz jedna rzecz ktora bedzie zrobiona dobrze i taka pozostanie w wiekszosci do konca. Nawet sie przylozylem do licznika FPS'ow i zrobilem oddzielna klase z szeregiem metod itp (o dziwo niby fps counter a tyle sie tego narobilo :P)

Ta ksiazka ktora dostalem jest bardzo dobra i polecam [DirectX9 User Interfaces Design and Implementation]. Sama klasa bazowa (dziedziczy z niej kazda kontrolka) opisana zostala az w 2 rozdzialach ! Tyle tego jest ze wyjdzie z tego naprawde dosyc elastyczny interface a jak dobrze zrozumiem temat to nie problem z czasem projektowac i dodawac nowe kontrolki.

No wiecie kazdy ma jakies marzenie (moje to jak ze popularne mmorpg) wiec lepiej wczesniej zaczac robic cos pod katem wykorzystania w przyszlosci wlasnie w tym celu. Ogolnie daje sobie jeszcze 10 lat na to :P

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej