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

Pociski

Ostatnio zmodyfikowano 2010-10-11 21:28
Autor Wiadomość
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ś ?
P-22731
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)

C/C++
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++ )
    {
        //jakieś obliczenia na poszczególnych pociskach
        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 );
            }
        }
        //interakcja ze światem
        anime();
        //dalsze akcje
    }
    return 0;
}

Kod nie jest "prawdziwy" ale tylko dla zaprezentowania ogólnej idei :)
P-22735
« 1 »
  Strona 1 z 1