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

[SDL] Problem z menu gry.

Ostatnio zmodyfikowano 2013-01-24 11:50
Autor Wiadomość
fedoramaster
Temat założony przez niniejszego użytkownika
[SDL] Problem z menu gry.
» 2013-01-23 21:55:49
Witam serdecznie. Tworzę grafikę i obsługę zdarzeń do gry w statki (C++). Gra posiada menu, okazuje się, że dość złożone.
Na początku pojawia się ekran z wyborem:

NEW GAME     LOAD GAME     END GAME

Na tym etapie wszystko gra, ponieważ jak klikam w END GAME, gra się wyłącza. LOAD GAME na razie pomijam, bo jeszcze nie go nie programowałem.

Problem zaczyna się przy NEW GAME, bo choć gdy klikam w niego pojawia się kolejny ekran z wyborem:

ATTACK     MOVE

To dalej nie jest już tak jak sobie tego życzyłem. Otóż dalej w zamyśle programu jest wybór działka, czyli wyświetlenie kolejnego ekranu:

CANNON     BOMBCANNON     SPREADCANNON

Dopiero po tym wyborze powinny wyświetlać się mapy (gracza i komputera). Następnie gracz miałby szansę wytypować pole do ataku, program sprawdziłby to pole, odświeżyłby mapę komputera i przeszedł do części programu odpowiedzialnej za atak komputera.

Mam nadzieję, że opisałem to zrozumiale. Problem polega na tym, że po wyborze ATTACK, nie wyświetla mi się wybór działa, tylko od razu pojawiają się mapy. Pokażę wam teraz uproszczony schemat pętli wyboru:

if ( kliknąłem w ATTACK )
{
wyświetl działka do wyboru
if ( kliknąłem w CANNON )
wyświetl mapę komputera
{dalej wybieram pole, sprawdzam itp...
}}

Oczywiście np. "kliknąłem w ATTACK" rozumiem przez instrukcję:

if( event1.type == SDL_MOUSEBUTTONDOWN )                  
            {
               
                if( event1.button.button == SDL_BUTTON_LEFT &&               //SDL - JESLI ATTACK
                ( myszkaX1 >= attackbut.x && myszkaX1 <=
                attackbut.x + attackbut.w ) &&( myszkaY1 >=
                attackbut.y && myszkaY1 <= attackbut.y +
                attackbut.h ) )
                {
                   ... } }

Nie wiem, może należy jakoś wyczyścić jakiś bufor myszki, by móc dokonywać następnego wyboru przez kliknięcie. Wydaje mi się, że to jakiś problem ze zdarzeniami.

Jestem laikiem w tej kwestii, więc czekam na pomocne odpowiedzi.
P-74885
mactec
» 2013-01-23 21:58:09
Kod dawaj w [code.][/code.] bez kropki
P-74886
Wasilek
» 2013-01-23 23:50:45
Zdaje mi się, że po prostu masz to odczytywanie zdarzeń, ale jest ono aktywne poza pętlą (a powinno być w niej), przez co od razu przechodzi do kolejnego punktu.

W sensie, że -> Dodaj pętle na całość pobierania zdarzeń :)
P-74894
m4tx
» 2013-01-24 05:57:09
Kod dawaj w [code.][/code.] bez kropki
Widzę, że i Tobie, i autorowi tematu przyda się to:
» KursyKurs STC kurs
;>
P-74898
SeaMonster131
» 2013-01-24 11:50:33
Może spróbuj zrobić tak:
C/C++
bool mouseClick = false;


if( KlikniecieMysza && !mouseClick )
{
    ....
    mouseClick = true;
}

if( !KlikniecieMysza && mouseClick )
     mouseClick = false;


Bo przy kliknięciu, może przechodzisz na kolejny ekran w menu, lecz "ten ekran" też odbiera zdarzenie kliknięcia myszką i od razu przenosi Cię na ekran rozgrywki.
P-74908
« 1 »
  Strona 1 z 1