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

[SDL] Komunikacja użytkownika z grą.

Ostatnio zmodyfikowano 2013-01-16 21:07
Autor Wiadomość
fedoramaster
Temat założony przez niniejszego użytkownika
[SDL] Komunikacja użytkownika z grą.
» 2013-01-14 16:26:58
Witam was ponownie. Tym razem chciałbym zapytać jak wygląda komunikacja w przypadku aplikacji okienkowej. Tzn. jak przekazać do programu jakieś dane np. współrzędne statku, który chcę zaatakować czyli x i y. Dysponujecie jakimiś tutorialami? Czytałem poradnik z tej strony o obsłudze klawiatury, ale nie znalazłem rozwiązania tego problemu.
P-73938
Admixior
» 2013-01-15 01:09:00
Tzn. jak przekazać do programu jakieś dane np. współrzędne statku, który chcę zaatakować czyli x i y.
Strasznie ogólnikowo napisane. Czytałem wiele razy a i tak ciężko zrozumieć czego szukasz.
Jeśli chodzi o komunikację użytkownika z programem, to można to zrobić za pomocą myszki i klawiatury... oba tutoriale są na stronie.
Jeśli nie wiesz w jaki sposób będzie dobrze to kieruj się tym żeby było najbardziej intuicyjnie. Wszystko zależy od tego co jest pisane.
Przykład: klasyczną grę w statki byłoby najlepiej zrobić poprzez kliknięcie na pole które chcemy zaatakować. Natomiast po najechaniu na jakieś pole jest ono podświetlane lekko.
P-73982
fedoramaster
Temat założony przez niniejszego użytkownika
» 2013-01-15 01:46:50
W tym przypadku mówię konkretnie o jakimś zamienniku dla "cin >> ...". Potrzebuję wczytać liczbę całkowitą.
P-73983
Admixior
» 2013-01-15 02:41:51
W tym przypadku mówię konkretnie o jakimś zamienniku dla "cin >> ...". Potrzebuję wczytać liczbę całkowitą.
Jeśli chcesz wczytywać nie z konsoli tylko z okienka z grą no to jest trudniej...
Nigdy nie pisałem w  SDL-u ale szczerze wątpię by udostępniało taką funkcjonalność.
Wg. mnie teraz pozostaje ci tylko napisać własną kontrolkę do wprowadzania liczb lub poszukać gotowego rozwiązania na necie (takowe pewnie będzie z całą biblioteką do obsługi całego Api w SDL, mam na myśli szereg innych kontrolek + własne narzucane zasady). Gdy jednak sprubujesz sam napisać taką jedną kontrolkę (i lepiej) to nie jest to całkiem proste ale nie jest też trudne (dla osoby który już pisze dłuższy czas nie będzie żadnym kłopotem zrobić proste, słabą graficznie kontrolkę. Dla niedoświadczonego powiem że najlepiej takie coś "opchnąć" w oddzielną klasę (np: CSdlEdit) i do niego dorzucić odpowiednie funkcje zależne od biblioteki graficzne oraz właściwe przetrzymywanie liczby (tak by tylko robić: string x=CSdlEditObiekt.GetValue(); i później konwersja na int-a)
P-73984
fedoramaster
Temat założony przez niniejszego użytkownika
» 2013-01-15 03:16:50
Rozumiem, dzięki za odpowiedź. A nie da się zrobić hybrydy, tzn. wyświetlania mapy itp. za pomocą SDLa, a wczytywać liczby całkowite tj. x i y konsolowo?
P-73985
Admixior
» 2013-01-15 03:42:52
Takie coś zrobić można bez problemu.
1. Można utworzyć program konsolówkę (z funkcją main) i normalnie tak jakby nigdy nic wszystko to samo robić jak by była konsola (poprzez cin pobierać) a później jak gdyby nigdy nic utworzyć okno do gry (bo kto nam zabroni to przecież to program jak każdy inny).

2. Mając program aplikacje okienkową (z funkcją WinApi) można zaalokować konsole ( » WinAPIAllocConsole ) w dowolnym miejscu w programie, później przypisać mu strumień podstawowy wejścia i wyjścia, (nie pamiętam już jaka to była funkcja, a na końcu zdealokować konsole.

Myślę że sposób pierwszy jest łatwiejszy i  przyjaźniejszy. Chyba że konsole chcesz pojawić tylko w pewnym momencie na określony czas.
P-73989
RazzorFlame
» 2013-01-15 09:17:04
Tak jak na początku powiedział Admixior radziłbym zrobić własną konsolę okienkową. Robiłem już takie cóś w SDL niestety kod usunąłem razem z libem więc nie moge ci go udostępnić. Jeśli znasz się na klasach w stopniu przynajmniej dobrym to dasz sobie rade. Chodzi o to żeby stworzyć klase, która będzie podstawą twojego GUI. Większość kontrolek w Windowsie ma tak że gdy na nią naciśniesz staje się aktualna a wszystkie inne nie. Więc twoja klasa podstawowa powinna obsługiwać naciśnięcia myszy i sprawdzać czy przypadkiem nie jest aktualna. Reszta kontrolek powinna po niej to dziedziczyć i mieć własne funkcje. NP tak:
C/C++
class Podstawowa
{
public:
   
    bool CzyAktualna();
};

class EditBox
    : public Podstawowa
{
public:
   
    void Wczytaj();
    std::string GetContent();
    void ClearContent();
   
    std::string content; //zawartosc boxa
   
};
Tak właśnie to powinno wyglądać.
P-73999
fedoramaster
Temat założony przez niniejszego użytkownika
» 2013-01-15 10:58:21
Serdecznie wam dziękuję za odpowiedzi, ale zastanawiam się w tej chwili czy nie lepiej będzie zrobić tego z obsługą myszki. Klikając na pole - wybieram, gdzie chcę uderzyć. Tylko podobno myszka trudniejsza w obsłudze od klawiatury, co nie?
P-74005
« 1 » 2
  Strona 1 z 2 Następna strona