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

[Allegro] 1000 punktów przy jednej kolizji, problem ?

Ostatnio zmodyfikowano 2011-11-01 23:06
Autor Wiadomość
Dawidsoni
» 2011-11-01 10:06:24
A rysujesz ją co klatkę? Robisz tak: tworzysz nową zmienną czy_rysowac, ustawiasz ją na true (inicjalizujesz), jeśli zaszła kolizja ustawiasz ją na false.
A przy rysowaniu gruszki robisz tak: if(czy_rysowac) rysuj_gruszke
P-43180
Przemok123
Temat założony przez niniejszego użytkownika
» 2011-11-01 10:20:22
C/C++
if(( gruszka_y <= 768 ) )
{
   
    gruszka_y++;
}

else
{
    gruszka_x =( rand() % 950 ) + 50;
    gruszka_y = 0;
}
masked_blit( gruszka, bufor, 0, 0, gruszka_x, gruszka_y, gruszka->w, gruszka->h );

tak mam co do gruszki

P-43181
SeaMonster131
» 2011-11-01 11:46:40
C/C++
if( wyswietl_gruszke )
     masked_blit( gruszka, bufor, 0, 0, gruszka_x, gruszka_y, gruszka->w, gruszka->h );

Czyli:

C/C++
bool wyswietl_gruszke = true;

//w petli:
if( wyswietl_gruszke )
     masked_blit( gruszka, bufor, 0, 0, gruszka_x, gruszka_y, gruszka->w, gruszka->h );


if(( kolizja( ludek.x, ludek.y, ludek.s, ludek.w, gruszka_x, gruszka_y, 80, 80 ) == true ) && wyswietl_gruszke )
{
    pkt += 10;
    wyswietl_gruszke = false;
}

I będzie Ci działac.

a mam jeszcze taki problem co do tej punktacji gruszki, działa ,ale tylko raz, czyli gdy spada gruszka, nastepuje kolizja z postacią i dodaje 10 punktów ,ale gdy ta sama gruszka spada drugi raz to już nie dodaje.
Jeżeli nie wiesz jak działają wartości zmiennych, instrukcja if, to wróć do kursu. Inaczej długo nie zajedziesz.
Nawet @Dawidsoni Ci już to napisał:
Zrób jak powiedział SeaMonster, a jak chcesz, żeby można było kilka razy zrobić kolizje z tą samą gruszką (i dostać za nią punkty), to zrób tak, że jeśli zmienna wyswietl_gruszke = false to odlicza czas np. do 0,1 sekundy i po tym czasie zmienna wyswietl_gruszke = true.
P-43182
Przemok123
Temat założony przez niniejszego użytkownika
» 2011-11-01 11:48:39
no fakt mój błąd, jest napisane, ale nie wiem jak zrobić te odliczanie czasu, bo jak zrobie Sleep to mi sie zatrzyma cała gra.

Zrobiłem tak, ale coś nie działa:

C/C++
if(( kolizja( ludek.x, ludek.y, ludek.s, ludek.w, gruszka_x, gruszka_y, 80, 80 ) == true ) && wyswietl_gruszke )
{
    pkt += 10;
    if( wyswietl_gruszke = false )
    {
        Sleep( 1 );
        wyswietl_gruszke = true;
    }
}
P-43183
Dawidsoni
» 2011-11-01 21:53:47
Nie korzystam z Allegro, ale myślę, że jest coś tam takiego jak timery. Poszukaj w internecie albo dokumentacji Allegro. Ja korzystam z SFML i tam jest specjalna klasa Clock do takich rzeczy.
P-43211
SeaMonster131
» 2011-11-01 22:01:50
Kod który dałeś jest bez sensu. Bo po 1. tak nie porównuje się zmiennych, = to operator przypisania, po 2. pierwszy if się wykona gdy nastąpi kolizja i wyswietl_gruszke to prawda, wiec drugi if w tym pierwszym sie nie wykona, bo.. to nie logiczne:

if(kiss_my_ass == true) // pierwszy if
{
zrob_to();

if(kiss_my_ass == false) //drugi if
{
zrob_tamto();
}

}

Drugi if się nie wykona, bo jest w pierwszym if, więc kiss_my_ass musi być true, a drugi if się wykona kiedy kiss_my_ass będzie false, tylko nie będzie false, bo może być tylko true.

Hahahah :)

I jak chcesz odliczanie czasu to jej... dajesz zmienną czas, kiedy wyswietl_gruszke to fałsz, czas++, i kiedy czas >= 200, to dajesz wyswietl_gruszke jako prawdę...

Wsio, powodzenia ;)
P-43212
Przemok123
Temat założony przez niniejszego użytkownika
» 2011-11-01 22:15:10
dziękuje w ogóle za pomoc, zrobiłem tak:

C/C++
if(( kolizja( ludek.x, ludek.y, ludek.s, ludek.w, gruszka_x, gruszka_y, 80, 80 ) == true ) && wyswietl_gruszke )
{
    pkt += 10;
    wyswietl_gruszke = false;
    czas++;
    if( czas >= 200 )
    {
        wyswietl_gruszke = true;
    }
}
 
ale nie działa :(
P-43213
SeaMonster131
» 2011-11-01 22:30:49
bo czas się zwiększy tylko wtedy gdy nastąpi kolizja i wyswietl_gruszke to prawda, a Ty przecież podczas kolizji ustawiasz że wyswietl_gruszke to falsz...
P-43214
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona