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

Jak robi się DESTRUKTOR??

Ostatnio zmodyfikowano 2013-03-03 19:52
Autor Wiadomość
ziajek444
Temat założony przez niniejszego użytkownika
Jak robi się DESTRUKTOR??
» 2013-03-03 19:39:04
Udało mi się zrobić żeby tworzyć nowe obiekty (to ma symulować pociski) tylko że zrobilem to w taki sposób że jak "wystrzelę" więcej to zwalnia program i choć ich nie ma na ekranie to dalej się rysują poza mapą. Stwierdzam więc że potrzebuje je usuwać jak wyjdą poza ekran. Jak to zrobić?

C/C++
#include <allegro.h>
BITMAP * bufer;
class obiekt
{
private:
    int poz_x;
    int poz_y;
public:
    void zapisz( int, int );
    void wyswietl();
    int getpoz();
};

void obiekt::zapisz( int a, int b )
{
    poz_x = a;
    poz_y = b;
};

void obiekt::wyswietl()
{
    poz_x += 10;
    circle( bufer, poz_x, poz_y, 30, makecol( 255, 255, 255 ) );
    rest( 1 );
};

int obiekt::getpoz()
{
    return poz_x;
};





int main()
{
    //////////////////////
    obiekt dodaj[ 1000 ];
    obiekt * wsk;
    ///////////////////////
   
    allegro_init();
    install_keyboard();
    install_mouse();
   
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 700, 0, 0 );
   
    bufer = create_bitmap( 640, 700 );
    clear_to_color( bufer, 0x333333 );
    BITMAP * obiekt2 = create_bitmap( 640, 700 );
    clear_to_color( obiekt2, 1 );
    BITMAP * add = create_bitmap( 640, 700 );
    clear_to_color( add, makecol( 255, 255, 255 ) );
   
    int x = 0;
    int pom = 0;
    int px = 200;
    int py = 200;
   
   
    show_mouse( screen );
    while( !key[ KEY_ESC ] )
    {
        if( key[ KEY_A ] )
        {
            rest( 100 );
            dodaj[ x ].zapisz( px, py );
            x++;
        }
        pom = x;
       
        clear_to_color( bufer, 0x333333 );
        for( int i = x; i >= 0; i-- )
        {
            dodaj[ x ].wyswietl();
            x--;
        }
        blit( bufer, screen, 0, 0, 0, 0, 640, 700 );
        x = pom;
       
       
       
       
       
    }
    readkey();
   
    destroy_bitmap( bufer );
    destroy_bitmap( obiekt2 );
    destroy_bitmap( add );
   
    return 0;
}
END_OF_MAIN();
P-77606
SeaMonster131
» 2013-03-03 19:41:43
To albo nie rysuj pocisków niewidocznych na ekranie albo skorzystaj z np » standard C++vector
P-77607
ziajek444
Temat założony przez niniejszego użytkownika
» 2013-03-03 19:52:27
Dobra udało mi się, dodałem takie coś if(dodaj[x].getpoz()<640) dodaj[x].wyswietl();    zamiast dodaj[x].wyswietl(); czyli jak przekroczy screen to nie rysuje. Ale mam inny problem jak zrobić żeby jak nacisnę 'a' to żeby mi wykonywało x++; tylko raz nie ważne jak długo trzymam wciśnięte 'a' i żeby dodało znowu jak nacisnę znowu 'a'; (Albo chociaż trochę opóźnić, ale nie wstrzymując pętli programu)

Aktualizacja 03-03-2013 20:30
Poprawiłem płynność kodu ale dalej kulki nawalają jak z karabinu a nie strzelby

Aktualizacja 03-03-2013 21:08

OK mam.

C/C++
if( !key[ KEY_A ] ) press = true;

if( press == true )
{
    if( key[ KEY_A ] )
    { //1  
        x++;
        dodaj[ x ].zapisz( mouse_x, mouse_y ); //dodaj[x].zapisz(px,py);
        press = false;
    }
}

Dzięki za próbę SeaMonster131, A tak na marginesie, to zrobił byś dalej te poradniki na yt.
P-77608
« 1 »
  Strona 1 z 1