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

[Allegro] Problem z funkcją tworzącą sprite'y

Ostatnio zmodyfikowano 2009-07-04 21:18
Autor Wiadomość
Rares
Temat założony przez niniejszego użytkownika
[Allegro] Problem z funkcją tworzącą sprite'y
» 2009-07-04 18:25:52
Chciałem stworzyć sprite'y samochodu do mojej gry. Tak jak zrobił to Easykoder (http://www.easykoder.vot.pl/arty/samochodzik) w tej grafice:

http://www.easykoder.vot.pl/web/arty/obrazki/samochod.jpg

Jednak jest to niewydajne. Postanowiłem stworzyć bitmapę o wymiarach 1260x280 px, oraz jedną bitmapę samochodu (wymiary - 70x70 px) w jednej pozycji. Potem w programie uruchomiłem pętlę, która obracała sprite samochodu o 5 stopni, następnie kopiowała obrócony sprite na bitmapę do tego przeznaczoną (to ta o wymiarach 1260x280). Miałem uzyskać podobny efekt do tego jaki uzyskał Easykoder. Jednak wyszło mi coś takiego:

http://img125.imageshack.us/img125/4636/dlaa.png

Oto pętla od kopiowania sprite'a i jego obracania:

C/C++
for( int i = 0; i < 4; i++ )
{
    for( int j = 0; j < 18; j++ )
    {
        clear_to_color( bufor_sam_work, makecol( 255, 0, 255 ) );
        rotate_sprite( bufor_sam_work, car, 0 + xbsw, 0 + ybsw, ftofix( angle ) );
        blit( bufor_sam_work, bufor_sam, 0, 0, j * 70, i * 70, 70, 70 );
        angle += 5;
        ybsw += 16;
        xbsw -= 13;
        if( j % 5 == 0 ) xbsw = 0;
       
    }
}

Próbowałem to naprawić dodając dwie zmienne xbsw i ybsw, które będą dodawane do pozycji docelowej obróconego sprite'a, dzięki czemu samochód powinien się wyrównywać. O ile w pionie (ybsw) to zadziałało, to w poziomie mam problem.

Grafika z samochodem:

http://img78.imageshack.us/img78/8070/samochod.png

Jak to naprawić?
P-8218
DejaVu
» 2009-07-04 21:18:52
C/C++
double kat = 0;
//car - wczytana bitmapa 70x70.
//bufor_sam_work - czysta bitmapa (70*18)x(70*4)

for( int y = 0; y < 4 * 70; y += 70 )
{
    for( int x = 0; x < 18; x += 70 )
    {
        rotate_sprite( bufor_sam_work, car, x, y, ftofix( kat ) );
        kat += 5;
    }
}
Jeśli obrazki się będą 'przysłaniały' - utwórz dodatkowy bufor do którego obracane obiekty będą trafiały. Kodu nie testowałem.
P-8221
« 1 »
  Strona 1 z 1