Lenteur avec l'emploi du timer dans c++ builder

benoitrog11 Messages postés 2 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 27 janvier 2004 - 27 janv. 2004 à 21:34
HUSNET Messages postés 6 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 4 mars 2005 - 2 mars 2005 à 20:31
je dois créer un casse-briques ou arkanoid en c++ builder. Mon jeu lag un peu ca, je suppoose, j'ai beaucoup (trop je suppose) de test et de fonction dans le timer.
J'ai tenté toutes les "Interval" pour le timer, changé la vitesse de la balle, réduit au minimums les test et fonction mises dans le timer...
Connaitriez vous un moyen pour accelerer ce jeu, faire en sorte qu'il ne lag plus...
merci a tous

3 réponses

benoitrog11 Messages postés 2 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 27 janvier 2004
27 janv. 2004 à 21:39
voici le code :

TForm1 *Form1;
//declarations
class defbriques
{
 public:
 float posx,posy;
 int touche;
};
int x,y,vx,vy,mx,my;
float tailbricx,tailbricy;

#define nbbrikx 20
#define nbbriky 20
class defbriques mur[nbbrikx][nbbriky];

//---------------------------------------------------------------
//--------------------------fonctions----------------------------
//---------------------------------------------------------------

//dessin des briques---------------------------------------------
void dessin(class defbriques mur[nbbrikx][nbbriky])
{
 for (int i=0;i<nbbrikx;i++)
 {
  for (int j=0;j<nbbriky;j++)
  {
   if (mur[i][j].touche!=0)
   {
    Form1->Image1->Canvas->Pen->Color=clBlack;
    Form1->Image1->Canvas->Rectangle(mur[i][j].posx,mur[i][j].posy,mur[i][j].posx+tailbricx,mur[i][j].posy+tailbricy);
   }
  }
 }
};
//----------------------------------------------------------------
//testtouch
void testtouch(class defbriques mur[nbbrikx][nbbriky], int x, int y)
{
for (int i=0;i<nbbrikx;i++)
{
 for (int j=0;j<nbbriky;j++)
 {
  if (x>=mur[i][j].posx && x<=mur[i][j].posx+tailbricx && mur[i][j].touche!=0 && y-5>=mur[i][j].posy && y-5<=mur[i][j].posy+tailbricy)
  {
   mur[i][j].touche=mur[i][j].touche-1;
   vy=-vy;
   Form1->Image1->Canvas->Pen->Color=clWhite;
   Form1->Image1->Canvas->Rectangle(mur[i][j].posx,mur[i][j].posy,mur[i][j].posx+tailbricx,mur[i][j].posy+tailbricy);
  }
 }
}
};
//----------------------------------------------------------------

/*
mx,my=position de la souris
*/
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//déplace ball
Image1->Canvas->Pen->Color=clWhite;
Image1->Canvas->Brush->Color=clWhite;
Image1->Canvas->Ellipse(x-5,y-5,x+5,y+5);
x=x+vx;
y=y+vy;
Image1->Canvas->Pen->Color=clRed;
Image1->Canvas->Brush->Color=clRed;
Image1->Canvas->Ellipse(x-5,y-5,x+5,y+5);

//rebond murs
if (x+5>=Image1->Width) vx=-vx;
if (x-5<=0) vx=-vx;
if (y-5<=0) vy=-vy;

//rebond raket
if (y+5>=Image1->Height-10 && x>=mx-20 && x<=mx+20)
{
vy=-vy;
}
//mur
testtouch(mur,x,y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
x=100;
y=250;
vx=2;
vy=2;
Label1->Caption="";
tailbricx=Image1->Width/nbbrikx;
tailbricy=Image1->Height/(nbbriky*2);

for (int i=0;i<nbbrikx;i++)
{
 for (int j=0;j<nbbriky;j++)
 {
 mur[i][j].posx=tailbricx*i;
 mur[i][j].posy=tailbricy*j;
 mur[i][j].touche=1;
 }
}
dessin(mur);
}
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
28 janv. 2004 à 12:29
Salut, g pas le courrage de mater ton code, ms je pense qu'il faut déplacer la balle de 5pixels par 5pixels, et la, si tu mé pas de timer, t cuit lol !

++
0
HUSNET Messages postés 6 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 4 mars 2005
2 mars 2005 à 20:31
En fait, je dois faire un casse-Brique en cours et je trouve que le tien est tres
bien pour commencer
seulement je voudrais bien savoir et comprendre comment tu fais pour
que la balle ricoche sur la brique et la fais disparaitre.

j'ai deja commencé mon programme avec les equations de trajectoire de la
balle et la raket... et il me reste plus qu'a faire(en gros) les briques
correctement avec leur suppression.
merci d'avance et j'espere que tu pourras me répondre...
0
Rejoignez-nous