Pociski
Ostatnio zmodyfikowano 2010-10-11 21:28
superkam Temat założony przez niniejszego użytkownika |
Pociski » 2010-10-11 20:41:40 Otóż tak: Jest sobie pocisk a nawet dwa: BITMAP *pocisk = NULL; BITMAP *pocisk2 = NULL; pocisk = load_bmp("pocisk.bmp",default_palette); pocisk2 = load_bmp("pocisk.bmp",default_palette); bool pocisk_wystrzelono = false; bool pocisk2_wystrzelono = false; I jest on sobie wystrzeliwany o tak: if(key[KEY_SPACE]) { pocisk2_wystrzelono = true; pocisk2_x = ludek2_x; } if(key[KEY_ENTER]) { pocisk_wystrzelono = true; pocisk_x = ludek_x; } A to if odpowiedzialny za wystrzelenie: if(pocisk_wystrzelono) { pocisk_y-=0.4; if(pocisk_y <= 0) pocisk_y = ludek_y; } if(pocisk2_wystrzelono) { pocisk2_y+=0.4; if(pocisk2_y >= 480) pocisk2_y = ludek2_y; } No i jak widać ten pocisk się nie będzie zatrzymywał i na tym polega mój problem, że nie wiem jak go zatrzymać jeżeli już przejdzie przez ten ekran i "teleportuje się do statku". W tym miejscu chciałbym go zatrzymać, ale żeby nie trzeba było trzymać cały czas klawisza żeby on leciał. Pomoże ktoś ? |
|
kamillo121 |
» 2010-10-11 21:28:33 Powiem Ci tak, żeby "zatrzymać" pocisk najlepiej sprawdzaj kolizję z obiektami, jeżeli wystąpi to go zatrzymuj, a co do animacji/ruchu pocisku. Możesz np stworzyć sobie funkcję/klasę, która będzie obsługiwała dodanie pocisku np na vector, i wtedy w pętli głównej możesz po prostu animowac pociski dodane itd np (pseudokod) struct Pocisk { int xVec, yVec; short vSpeed; };
std::vector < Pocisk > BAM;
void add( Pocisk pc ) { BAM.push_back( pc ); }
void anime() { for( int i = 0; i < Bam.rozmiar(); i++ ) { BAM[ i ].bum.xVec += cosikTam; BAM[ i ].bum.Yvec += taksamo; if( kolizja( pocisk ) ) { usunPocisk( i ); } else wyswietlNaBufor(...); } }
main() { while( !Quit ) { while( Obasluga_Zdarzen ) { if( USER_KEY_SPACE ) { Pocisk bum; bum.xVec = xUser; bum.yVec = yUser; bum.vSpeed = 20; add( bum ); } } anime(); } return 0; }
Kod nie jest "prawdziwy" ale tylko dla zaprezentowania ogólnej idei :) |
|
« 1 » |