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

[Allegro] Poruszanie się po kratkach

Ostatnio zmodyfikowano 2009-05-18 21:33
Autor Wiadomość
PhonniX
Temat założony przez niniejszego użytkownika
[Allegro] Poruszanie się po kratkach
» 2009-05-18 14:32:09
Witam.
Po dłuższej przerwie postanowiłem wrócić do pisania gry w allegro.
Mam mapkę po której porusza się postać, ale chcę aby ona poruszała się po kratkach (40x40) ale nie w ten sposób, że przeskakuje z jednej na drugą, ale przechodzi.
Próbowałem już kilka sposobów (np: po kliknięciu klawisza włączyć pętle w której dodaje 40 razy +1 do pozycji gracza) ale żaden nie działa.
Jeśli ktoś wie jak to zrobić, to niech piszę w tym temacie.
Z góry dziękuje.
P-6998
WunM
» 2009-05-18 16:25:55
Masz dwa stany: idzie i nie idzie. Kiedy  gracz wciśnie klawisz w np. górę a stan idzie jest aktywny to odrzucasz to. Gdy stan nie idzie jest aktywny przyjmujesz tą propozycję i przemieszczasz gracza w dane pole (zależne od naciśniętego klawisza). Miejsce docelowe możesz zapisać sobie w jakiejś zmiennej. Robisz oddzielną funkcję która stopniowo przemieszcza gracza w dane pole  aż dojdzie. Potem znowu przyjmujesz propozycję gracz (gdzie iść) i znowu koło.
P-7002
DejaVu
» 2009-05-18 16:27:24
C/C++
//przed pętlą główną:
int kierunekX = 0;
int kierunekY = 0;

//w pętli głównej:
if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 )
{
    kierunekX = 0;
    kierunekY = 0;
    if( key[ VK_RIGHT ] ) kierunekX = + 1; else
    if( key[ VK_LEFT ] ) kierunekX = - 1; else
    if( key[ VK_DOWN ] ) kierunekY = + 1; else
    if( key[ VK_UP ] ) kierunekY = - 1;
   
} //if
pozycjaX += kierunekX;
pozycjaY += kierunekY;
Dla każdego obiektu tak mniej więcej powinno być to zrealizowane.

/edit:
Wymoderowałem moje niedopatrzenie, które zostało napisane w poniższym poście ;p
P-7003
steckel
» 2009-05-18 16:34:09
Ja bym zamienił to:
C/C++
if( pozycjaX % 40 == 0 && pozycjaX % 40 == 0 )
na to:
C/C++
if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 )
P-7004
PhonniX
Temat założony przez niniejszego użytkownika
» 2009-05-18 17:03:00
Wszystko działa, ale mam jeszcze jedno pytanie.
Mam animacje postaci, podczas jednego kroku dodaje frame+1, a następnie sprawdza
C/C++
if( frame >= 0 && frame < 1 ) { ludek.klatka = 0; }
else if( frame >= 1 && frame < 2 ) { ludek.klatka = 1; }
else if( frame >= 2 && frame < 3 ) { ludek.klatka = 2; }
else if( frame >= 3 && frame < 4 ) { ludek.klatka = 3; }
Al chce zrobić, że podczas jednego kroku wykonuje 3 sekwencje animacji.
P-7005
WunM
» 2009-05-18 17:06:09
To wiązałoby się z tym że ludzik chodził by 3-razy wolniej. Czyli co 3-tury jeden krok. Możesz przyśpieszyć timer 3-razy,ale nie wiem czy wszystko zobaczysz (tzn. czy efekt nie będzie taki sam  jak w przypadku jednej animacji w jednej  sekwencji ruchu).
P-7006
PhonniX
Temat założony przez niniejszego użytkownika
» 2009-05-18 19:56:49
A niemożna jakoś zrobić ,że po przejściu ileś tam pixeli zmienia się klatka?
P-7014
steckel
» 2009-05-18 20:55:59
Można
C/C++
int ip = 0;
if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 )
{
    kierunekX = 0;
    kierunekY = 0;
    if( key[ VK_RIGHT ] ) { kierunekX = + 1; ip++; } else
    if( key[ VK_LEFT ] ) { kierunekX = - 1; ip++; } else
    if( key[ VK_DOWN ] ) { kierunekY = + 1; ip++; } else
    if( key[ VK_UP ] ) { kierunekY = - 1; ip++; }
    if( ip > 5 ) {
        //zmienKlatkę();
        ip = 0;
    }
}
ip - ilość pixeli, po których ma być zmiana klatki.
P-7017
« 1 » 2
  Strona 1 z 2 Następna strona