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

[allegro 5] multiplayer

Ostatnio zmodyfikowano 2012-11-04 21:35
Autor Wiadomość
qest43
Temat założony przez niniejszego użytkownika
[allegro 5] multiplayer
» 2012-11-04 19:23:53
Napisałem grę dla 2 graczy, no i jeden steruje na WSAD a drugi na kursorach. Jak jeden gracz się rusza to wszystko jest ok, ale jak oboje to jeden z nich zaczyna wariować, jest niewrażliwy na kolizję itp. Jak to naprawić ?


 
C/C++
while( !al_key_down( & key_state, ALLEGRO_KEY_ESCAPE ) )
{
    ALLEGRO_EVENT events;
    al_wait_for_event( event_queue, & events );
    al_get_keyboard_state( & key_state );
   
    if( events.type == ALLEGRO_EVENT_TIMER )
    {
        if( events.timer.source == timer )
        {
            if( al_key_down( & key_state, ALLEGRO_KEY_RIGHT ) && player[ 0 ].cord_x < 650 ) { player[ 0 ].cord_x += moveSpeed; DIR = RIGHT; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_LEFT ) && player[ 0 ].cord_x > 0 ) { player[ 0 ].cord_x -= moveSpeed; DIR = LEFT; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_UP ) && player[ 0 ].cord_y > 0 ) { player[ 0 ].cord_y -= moveSpeed; DIR = UP; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_DOWN ) && player[ 0 ].cord_y < 650 ) { player[ 0 ].cord_y += moveSpeed; DIR = DOWN; }
           
           
            if( al_key_down( & key_state, ALLEGRO_KEY_D ) && player[ 1 ].cord_x < 650 ) { player[ 1 ].cord_x += moveSpeed; DIR = RIGHT; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_A ) && player[ 1 ].cord_x > 0 ) { player[ 1 ].cord_x -= moveSpeed; DIR = LEFT; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_W ) && player[ 1 ].cord_y > 0 ) { player[ 1 ].cord_y -= moveSpeed; DIR = UP; }
            else if( al_key_down( & key_state, ALLEGRO_KEY_S ) && player[ 1 ].cord_y < 650 ) { player[ 1 ].cord_y += moveSpeed; DIR = DOWN; }
 
fragment kodu
P-68476
SeaMonster131
» 2012-11-04 20:27:53
Może to wina wspólnego kierunku, tj. DIR ?
P-68483
qest43
Temat założony przez niniejszego użytkownika
» 2012-11-04 20:37:23
Też nie za bardzo nic, teraz zamiast gracza sterującego kursorami, wariuje ten sterujący WSADem. Dam większą część kodu

C/C++
bool colision( int x, int y, int ex, int ey, int wys, int szer )
{
    if( x - 17 + szer < ex || x - 2 > ex + szer || y - 12 + wys < ey || y - 2 > ey + wys ) return false;
    else return true;
   
}

////////////////////

int DIR[ 1 ];

if( events.type == ALLEGRO_EVENT_TIMER )
{
    if( events.timer.source == timer )
    {
        if( al_key_down( & key_state, ALLEGRO_KEY_RIGHT ) && player[ 0 ].cord_x < 650 ) { player[ 0 ].cord_x += moveSpeed; DIR[ 0 ] = RIGHT; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_LEFT ) && player[ 0 ].cord_x > 0 ) { player[ 0 ].cord_x -= moveSpeed; DIR[ 0 ] = LEFT; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_UP ) && player[ 0 ].cord_y > 0 ) { player[ 0 ].cord_y -= moveSpeed; DIR[ 0 ] = UP; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_DOWN ) && player[ 0 ].cord_y < 650 ) { player[ 0 ].cord_y += moveSpeed; DIR[ 0 ] = DOWN; }
       
       
        if( al_key_down( & key_state, ALLEGRO_KEY_D ) && player[ 1 ].cord_x < 650 ) { player[ 1 ].cord_x += moveSpeed; DIR[ 1 ] = RIGHT; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_A ) && player[ 1 ].cord_x > 0 ) { player[ 1 ].cord_x -= moveSpeed; DIR[ 1 ] = LEFT; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_W ) && player[ 1 ].cord_y > 0 ) { player[ 1 ].cord_y -= moveSpeed; DIR[ 1 ] = UP; }
        else if( al_key_down( & key_state, ALLEGRO_KEY_S ) && player[ 1 ].cord_y < 650 ) { player[ 1 ].cord_y += moveSpeed; DIR[ 1 ] = DOWN; }
       
        for( int i = 0; i <= 13; i++ )
        for( int j = 0; j <= 13; j++ )
        {
            if( object[ j ][ i ].colision == 1 )
            {
                for( int k = 0; k <= 3; k++ )
                {
                    if( colision( player[ k ].cord_x, player[ k ].cord_y, i * 50, j * 50, 50, 50 ) )
                    {
                        for( int c = 0; c <= 1; c++ )
                        if( DIR[ c ] == DOWN ) { player[ k ].cord_y -= moveSpeed; }
                        if( DIR[ c ] == UP ) { player[ k ].cord_y += moveSpeed; }
                        if( DIR[ c ] == RIGHT ) { player[ k ].cord_x -= moveSpeed; }
                        if( DIR[ c ] == LEFT ) { player[ k ].cord_x += moveSpeed; }
                    }
                }
            }
        }
P-68484
Mrovqa
» 2012-11-04 20:54:49
Zastanów się nad tym - ile elementowa jest to tablica?
C/C++
int DIR[ 1 ];
P-68487
qest43
Temat założony przez niniejszego użytkownika
» 2012-11-04 20:57:52
indeksujemy od zera czyli 2
P-68488
qest43
Temat założony przez niniejszego użytkownika
» 2012-11-04 21:11:37
Dobra już rozwiąząłem problem dzięki SeaMonster. Pokombinowałem trochę i jest ok.
P-68490
ison
» 2012-11-04 21:35:05
indeksujemy od zera czyli 2
To nie ma znaczenia, że indeksujemy od 0, jeśli deklarujesz tablicę tab[n] to ma ona n elementów a jej ostatni element ma indeks n-1, czyli dla
int DIR[ 1 ];
 masz 1 element o indeksie 0
P-68496
« 1 »
  Strona 1 z 1