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

[Allegro] Problem z kolizją

Ostatnio zmodyfikowano 2009-08-07 15:49
Autor Wiadomość
kampar
Temat założony przez niniejszego użytkownika
[Allegro] Problem z kolizją
» 2009-08-07 15:30:01
Załóżmy że mam taki kod:

C/C++
int x = 0;
int y;

while( !key[ KEY_ESC ] )
{
   
    x++;
    rest( 1 )
   
    if( key[ KEY_SPACE ] ) y = x;
   
}

cout << " y ma wartosc " << y << endl;

Jak zrobić by 'y' mialo wartość taką samą jak 'x' przy nacisnieciu spacji. Wiem że to pewnie jest 'nobowskie' pytanie, ale mam dzisiaj 'blokade umyslu' i nie moge wpasc. Z góry dzięki za odpowiedź.
P-9182
eBbi
» 2009-08-07 15:33:11
no to co napisałeś nie działa? mi się wydaje że wszystko ok, chyba że nie dołaczyłeś biblioteki i cosik z tym nie tak, ale by błąd wywaliło
P-9183
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-07 15:34:53
poczekaj zaraz sprawdze moze zly przyklad dalem
P-9184
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-07 15:39:46
chodzi mi o to że jesli nacisne spacje gdy x==300, to wtedy 'y' tez rowna sie 300.
Ale jesli do x doda sie 1 to wtedy automatycznie y==301. Po prostu chce, aby wartosc y sie nie zmieniala
P-9187
eBbi
» 2009-08-07 15:44:20
moim zdaniem to nie możlie żeby się zmieniało samo. Poprostu spacje naciskając to to nie robisz w mikro sekundzie tylko trochę dłużej ;p no a w tym czasie ta pętla zrobi z kilka tysięcy okrążeń ;]
P-9188
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-07 15:49:57
Dobra moze faktycznie to byl zly przyklad...

Chodzi mi o to:
C/C++
int czolg_x = 400, czolg_y = 535;
int wrog_x = 400, wrog_y = 15;
int pocisk_x;
int d = 1;
int e = 0;
int p = 0;
int w = 0;

int pocisk_y = 525;

while( !key[ KEY_ESC ] )
{
   
    if( key[ KEY_LEFT ] )
    {
        if( czolg_x >= 10 ) czolg_x -= 3;
       
    }
   
    if( key[ KEY_RIGHT ] )
    {
        if( czolg_x <= 760 ) czolg_x += 3;
       
    }
   
    if( key[ KEY_SPACE ] ) p = 1;
   
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
    masked_blit( czolg, bufor, 0, 0, czolg_x, czolg_y, czolg->w, czolg->h );
   
    if( d == 1 )
    {
        masked_blit( wrog, bufor, 0, 0, wrog_x, wrog_y, wrog->w, wrog->h );
    }
   
    if(( wrog_x > 10 ) &&( e == 0 ) &&( d == 1 ) )
    {
        wrog_x -= 2;
        if( wrog_x < 15 ) e = 1;
       
    }
   
    if(( wrog_x < 760 ) &&( e == 1 ) &&( d == 1 ) )
    {
        wrog_x += 2;
        if( wrog_x > 755 ) e = 0;
       
    }
   
   
    if(( p == 1 ) &&( pocisk_y == 525 ) )
    {
        play_sample( strzal, 255, 127, 1000, 0 );
        pocisk_x = czolg_x; ////////////////////////////////////tutaj
    }
   
   
    if(( p == 1 ) &&( pocisk_y >= 0 ) )
    {
        masked_blit( pocisk, bufor, 0, 0, pocisk_x, pocisk_y, pocisk->w, pocisk->h );
        pocisk_y -= 5;
       
    }
   
    int wrog1 = wrog_x - 15;
    int wrog2 = wrog_x + 16;
    if(( w >= 1 ) &&( w <= 100 ) )
    {
        masked_blit( wybuch, bufor, 0, 0, wrog_x, wrog_y, wybuch->w, wybuch->h );
        w++;
    }
    if( w == 100 ) w = 0;
   
    if(( czolg_x >= wrog1 ) &&( czolg_x <= wrog2 ) &&( pocisk_y <= 40 ) &&( pocisk_y >= 10 ) &&( d == 1 ) ) //kolizja
    {
        play_sample( bum, 255, 127, 1000, 0 );
       
        pocisk_y = 0;
        d = 0;
        w++;
    }
   
   
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
   
    if( pocisk_y == 0 )
    {
        pocisk_y = 525;
        p = 0;
    }

W tym przykladzie pocisk leci do przodu, ale caly czas pocisk_x jest rowne czolg_x, czyli podaza za mna

EDIT: Eh juz wiem gdzie jest blad:
"if((czolg_x >= wrog1) && (czolg_x <= wrog2) && (pocisk_y <= 40) && (pocisk_y >= 10) && (d == 1))//kolizja"
zamiast czolg_x powinno byc pocisk_x i to mnie zmylilo
Temat zamykam
Ps: zauwazylem ze jesli glowie sie nad jakims problemem a potem wstawiam go na forum, to po chwili znajduje rozwiazanie - dziwne nie? :D
P-9189
« 1 »
  Strona 1 z 1