Witam,
Mam pytanie, jestem na etapie robienia gry arkanoid, postanowiłem jednak że cegiełki będą tworzone operatorem new. Wszystko fajnie ale przy kontakcie piłki z cegiełką nie chce ona zniknąć. Co dziwne właściwość Visible jest zmieniana na false tzn po sprawdzeniu IF Visible cegełki zniszczone zwracają fałsz ale są dalej widoczne.
class field { public: int sx,sy; //SIZE, HOW MANY BRICKS HORIZONTAL AND VERTICAL int offsetx, offsety; //OFFSET OF ORIGIN FROM 0,0 IN PIXELS brick * bp; //POINTER TO TABEL OF BRICKS field(int xx=15,int yy=6); }; ////////////////////////////////// field :: field(int xx,int yy) : sx(xx), sy(yy), offsetx(60), offsety(60) { bp = new brick[xx*yy]; for(int i=0; i<sy; i++) { for(int j=0; j<sx; j++) { bp[(j*sy)+i].x = j; bp[(j*sy)+i].y = i; bp[(j*sy)+i].seturslf(offsetx, offsety); } } } ////////////////////////////////////////// class brick { static int sizex, sizey; public: int x,y; TImage * pic; brick(int x=0, int y=0); void seturslf(int ofx, int ofy); void change(); //bool collision(); }; /////////////////////////////////////////// void brick :: seturslf(int offx, int offy) { pic->Top = y*sizey+offy; pic->Left = x*sizex+offx; pic->Transparent=true; pic->Picture->LoadFromFile("img/brick.bmp"); } ///////////////////////////////////////////// void brick :: change() { //pic->Picture->LoadFromFile("img/ball.bmp"); pic->Visible=false; pic->Enabled=false; } //////////////////////////////////////////// MAIN for(int i=0; i<(hmx*hmy); i++) { if(collision(ball, area.bp[i].pic) && area.bp[i].pic->Visible==true) { x=-x; y=-y; //area.bp[i].pic->Visible=false; //Image1->Picture->LoadFromFile("img/ball.bmp"); //area.bp[i].pic->Picture->LoadFromFile("img/ball.bmp"); area.bp[i].change(); } }
Jak widać mamy klasę field odpowiedzialną za stworzenie cegieł swoim konstruktorem.
Potem klasa cegła która ma w sobie obiekt TImage.
Funkcją seturslf nastawiam pokolei cegiełki (konkretniej obrazek w nich).
Funkcja change ma za zadanie wyłączyć cegłe czyli dokonać w niej zmiany parametru Visible.
Potem w mainie sprawdzam kolizję i warunek widoczności oraz wykonuję operację odbicia i zmiany.
No i niestety zmiana Visible nie powoduje zniknięcia cegły. Jeżeli ktoś ma jakiś pomysł to bardzo proszę o pomoc. Obawiam się że może być to wina samego kompilatora.