zobaczyłem w sieci grę RUSH HOUR gdzie samochodziki przesuwa się myszką
i próbuję taka napisać. Niby działa dobrze ale coś jest nie tak.
Sprity wychodzą poza dozwolony obszar jak szybciej pociągnie się myszką.
Myślę że głównym błędem może być sposób w jaki to napisałem a wymyśliłem to tak:
pola, sprity i współrzędne mam w tablicach.
Na ekranie wyświetlam wybrane sprity.
Wskaźnikiem myszki ustalam strefy zajmowane przez sprity i przypisuje im numer sprita.
Po wciśnięciu LMB ustalam punkt 'złapania' wybranego sprita a współrzędna sprita
otrzymuje wartość współrzędnej myszki minus ten punkt złapania.
Sprity maję poruszać się tylko po planie czarnym.
To moja pierwsza próba ze spritami więc przymrużcie trochę oko.
Czy takie rozwiązanie ma sens?, czy powinienem to zrobić inaczej?
...a może dla mnie już pora na czytanie psalmów()
zamieszczam do wglądu pętlę główną.
int hs = 0;
int z = 0;
int c1, c2, c3, c4;
while( !key[ KEY_ESC ] )
{
teksty_pomocnicze( mz, hs );
myszka();
for( int i = 1; i <= au; ++i )
if( z == 0 && mb == 0 && mx > sx[ i ] && mx < sx[ i ] + spr[ i ]->w && my > sy[ i ] && my < sy[ i ] + spr[ i ]->h ) mz = i;
if( mz > 0 && mz <= au && sa[ mz ] < 11 && z == 0 ) hs = mx - sx[ mz ];
if( mz > 0 && mz <= au && sa[ mz ] > 10 && z == 0 ) hs = my - sy[ mz ];
if( mb == 1 )
{
if( my > sy[ mz ] && my < sy[ mz ] + spr[ mz ]->h && mz > 0 && sa[ mz ] < 11 ) sx[ mz ] = mx - hs, z = 1;
if( mx > sx[ mz ] && mx < sx[ mz ] + spr[ mz ]->w && mz > 0 && sa[ mz ] > 10 ) sy[ mz ] = my - hs, z = 1;
if( mx < sx[ mz ] || mx > sx[ mz ] + spr[ mz ]->w && my < sy[ mz ] || my > sy[ mz ] + spr[ mz ]->h ) z = 0;
c1 = getpixel( kolizje, sx[ mz ] - 2, sy[ mz ] + 30 );
c2 = getpixel( kolizje, sx[ mz ] + 1 + spr[ mz ]->w, sy[ mz ] + 30 );
c3 = getpixel( kolizje, sx[ mz ] + 30, sy[ mz ] - 2 );
c4 = getpixel( kolizje, sx[ mz ] + 30, sy[ mz ] + 1 + spr[ mz ]->h );
if( c1 != 0 ) sx[ mz ] ++, z = 0;
if( c2 != 0 ) sx[ mz ] --, z = 0;
if( c3 != 0 ) sy[ mz ] ++, z = 0;
if( c4 != 0 ) sy[ mz ] --, z = 0;
}
if( mb == 0 && z == 1 && sa[ mz ] < 11 ) z = 0, sx[ mz ] =( mx - hs - 30 ) / a * a + 65;
if( mb == 0 && z == 1 && sa[ mz ] > 10 ) z = 0, sy[ mz ] =( my - hs - 30 ) / a * a + 65;
masked_blit( elementy, kolizje, 500, 0, 50, 50, 422, 373 );
for( int i = 1; i <= au; ++i ) draw_sprite( kolizje, spr[ i ], sx[ i ], sy[ i ] );
blit( elementy, bufor, 0, 0, 50, 50, 422, 373 );
for( int i = 1; i <= au; ++i ) draw_sprite( bufor, spr[ i ], sx[ i ], sy[ i ] );
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
rest( 1 );
};