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ć ? 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 |
|
SeaMonster131 |
» 2012-11-04 20:27:53 Może to wina wspólnego kierunku, tj. DIR ? |
|
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 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; } } } } }
|
|
Mrovqa |
» 2012-11-04 20:54:49 Zastanów się nad tym - ile elementowa jest to tablica? |
|
qest43 Temat założony przez niniejszego użytkownika |
» 2012-11-04 20:57:52 indeksujemy od zera czyli 2 |
|
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. |
|
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 |
|
« 1 » |