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.