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: 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ź. |
|
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 |
|
kampar Temat założony przez niniejszego użytkownika |
» 2009-08-07 15:34:53 poczekaj zaraz sprawdze moze zly przyklad dalem |
|
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 |
|
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ń ;] |
|
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: 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; } 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 ) ) { 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 |
|
« 1 » |