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

[Allegro 4] Animacja, oraz za częste losowanie.

Ostatnio zmodyfikowano 2012-10-20 09:24
Autor Wiadomość
Forczek
Temat założony przez niniejszego użytkownika
[Allegro 4] Animacja, oraz za częste losowanie.
» 2012-10-18 21:48:26
Siemka, mam dwa błędy w moim kodzie i nie mam bladego pojęcia o co tutaj chodzi. Na początku animacja, o to kod:
C/C++
if( moneta_animacja[ 2 ] == false )
{
    if( frame[ 1 ] < 20 ) { draw_sprite( bufor, moneta1, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 20 && frame[ 1 ] < 40 ) { draw_sprite( bufor, moneta2, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 40 && frame[ 1 ] < 60 ) { draw_sprite( bufor, moneta3, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 60 && frame[ 1 ] < 80 ) { draw_sprite( bufor, moneta4, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 80 && frame[ 1 ] < 100 ) { draw_sprite( bufor, moneta5, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 100 && frame[ 1 ] < 120 ) { draw_sprite( bufor, moneta6, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 120 && frame[ 1 ] < 140 ) { draw_sprite( bufor, moneta7, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 140 && frame[ 1 ] < 150 ) { draw_sprite( bufor, moneta8, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    if( frame[ 1 ] == 150 ) moneta_animacja[ 2 ] = true;
   
}
else if( moneta_animacja[ 2 ] == true )
{
    if( frame[ 1 ] < 20 ) { draw_sprite( bufor, moneta8, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 20 && frame[ 1 ] < 40 ) { draw_sprite( bufor, moneta7, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 40 && frame[ 1 ] < 60 ) { draw_sprite( bufor, moneta6, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 60 && frame[ 1 ] < 80 ) { draw_sprite( bufor, moneta5, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 80 && frame[ 1 ] < 100 ) { draw_sprite( bufor, moneta4, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 100 && frame[ 1 ] < 120 ) { draw_sprite( bufor, moneta3, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 120 && frame[ 1 ] < 140 ) { draw_sprite( bufor, moneta2, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    else if( frame[ 1 ] >= 140 && frame[ 1 ] < 150 ) { draw_sprite( bufor, moneta1, moneta_x[ 2 ], moneta_y[ 2 ] ); }
    if( frame[ 1 ] == 150 ) moneta_animacja[ 2 ] = false;
   
}
frame podzieliłem na dwa do menu i do gry. Nie wiem dlaczego zmienna nie zmienia wartości z false na true i odwrotnie. Może jakieś sugestie? Nie dałem tego w jeden, bo animacja jak dla mnie działa by się za szybko.

Druga sprawa to zaczęste losowanie. Może najpierw kod:
C/C++
if( spadanie_monet[ 0 ] == false && frame[ 1 ] == 0 )
{
    losowanie_monet[ 0 ] =( rand() % 100 ) + 0;
    moneta_x[ 0 ] =(( rand() % 750 ) + 0 );
}
if( losowanie_monet[ 0 ] >= 30 )
{
    spadanie_monet[ 0 ] == true;
}
if( spadanie_monet[ 0 ] == true )
{
    moneta_y[ 0 ] ++;
}
if( moneta_y[ 0 ] >= 649 )
{
    moneta_y[ 0 ] = - 50;
    spadanie_monet[ 0 ] = false;
}
if( mx >= moneta_x[ 0 ] && mx - 50 <= moneta_x[ 0 ] && moneta_y[ 0 ] <= 500 && moneta_y[ 0 ] >= 450 )
{
    wymagane_punkty -= 1;
    moneta_y[ 0 ] = - 50;
    spadanie_monet[ 0 ] = false;
}

Tutaj opisane jest całe spadanie monety. Problem mam w tym, że losowanie odbywa się zawsze gdy frame[ 1 ] == 0. Tak jakby warunek spadanie_monet[ 0 ] nie był istotny. Prosiłbym o pomoc, bo sam nie wiem o co tutaj chodzi!?
P-67058
Dragonit
» 2012-10-18 22:51:31
Pokaż gdzie i jak używasz dekrementacji wartości w tablicy frame.
P-67060
Forczek
Temat założony przez niniejszego użytkownika
» 2012-10-19 11:18:16
Nie jestem pewien o co chodzi. Ale chyba chodzi ci o jedno z tych rzeczy:
C/C++
int frame[ 1 ];
frame[ 0 ] = 0;
frame[ 1 ] = 0;
.
.
.
if( menu == 1 )
{
    frame[ 0 ] ++;
    if( frame[ 0 ] == 150 ) frame[ 0 ] = 0;
   
    .
    .
    .
}
if( menu == 2 )
{
    frame[ 1 ] ++;
    if( frame[ 1 ] == 150 )
    {
        czas += 1;
        frame[ 1 ] = 0;
    }
    .
    .
    .
}
Jak nie coś z tego to napisz prościej, bo nie rozumie.
P-67065
Dragonit
» 2012-10-19 15:10:25
To jeszcze pokaż gdzie zmieniasz wartość zmiennej menu :)

i to ? co to jest ?
C/C++
int frame[ 1 ];
frame[ 0 ] = 0;
frame[ 1 ] = 0;

...poćwicz tablice
P-67074
Forczek
Temat założony przez niniejszego użytkownika
» 2012-10-19 15:53:31
Mam to w kolizji przycisku. Tu kod:
C/C++
if( mx > 250 && mx < 250 + przycisk2->w && my > 425 && my < 425 + przycisk2->h )
{
    masked_blit( przycisk2, bufor, 0, 0, 250, 425, przycisk2->w, przycisk2->h );
    textprintf_ex( bufor, font, 380, 447, makecol( 200, 0, 0 ), - 1, "Koniec" );
    if( mb == 1 )
    {
        menu = 0;
    }
}
else
{
    masked_blit( przycisk1, bufor, 0, 0, 250, 425, przycisk1->w, przycisk1->h );
    textprintf_ex( bufor, font, 380, 447, makecol( 0, 0, 200 ), - 1, "Koniec" );
}
Tu akurat całe wyświetlenie przycisku wraz z kolizją.
P-67078
Dragonit
» 2012-10-19 16:09:34
Już ci napisałem co masz źle :)
P-67081
Forczek
Temat założony przez niniejszego użytkownika
» 2012-10-19 16:15:54
Dobra, tablice. Ale ja tu błędu w zapisie nie widzę. Może oświeć mnie bardziej. Bym wdzięczny był niezmiernie.
P-67084
Dragonit
» 2012-10-19 16:22:27
Tablice liczymy od zera :)
P-67085
« 1 » 2
  Strona 1 z 2 Następna strona