Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Arkanoid, tworzenie cegieł operatorem new

$
0
0

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.


Viewing all articles
Browse latest Browse all 21942