Bonjour,
Je dois realiser un casse brique en C++ et pour cela je voudrais créer une classe brique qui créer un TSHAPE
Comment faire pour créer un TSHAPE dynamiquement ?
Merci beaucoup
Bonjour,
Je dois realiser un casse brique en C++ et pour cela je voudrais créer une classe brique qui créer un TSHAPE
Comment faire pour créer un TSHAPE dynamiquement ?
Merci beaucoup
Salut,
Tu peux trouver un debut de piste ici http://www.developpez.net/forums/sho...d.php?t=191729
hope it helps !
Salut !
Dans le topic donné par le lien j'avais été un peu court en terme d'efficacité !
Ne pas oublier qu'un TShape a besoin d'un parent.
Donc pour créer dynamiquement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 TShape *Shape; TList *EnJeu = new TList; TList *HorsJeu = new TList;Comme le nombre de briques va évoluer au fil du jeu, on peut utiliser 2 TList.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(int j = 0; j< nbShapes; j++) { Shape = new TShape(this); Shape->Parent = this; // la Form comme Parent; Shape->SetBounds(....); // à toi de trouver la règle pour les positionner //etc. EnJeu->Add(Shape); }
Au départ, toutes les briques sont dans une liste qui sert à maintenir les briques visibles (EnJeu) et à vérifier s'il y a ou non une collision.
A chaque fois qu'une brique doit disparaître, il suffit de la faire passer d'une liste (EnJeu) à l'autre (HorsJeu) et de lui affecter Visible = false.
La boucle pour tester une collision :
Pour recommencer la partie, il suffira de faire l'inverse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 for(int j = 0; j < EnJeu->Count; j++) { Shape = (TShape*)EnJeu->Items[j]; if(....) //si collision alors { Shape->Visible = false: EnJeu->Delete(j); HorsJeu->Add(Shape); //calculer la nouvelle trajectoire //.. return; //on quitte à cause du changement de trajectoire } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for(int j = 0; j < HorsJeu->Count; j++) { Shape = (TShape*)HorsJeu->Items[j]; Shape->Visible = true: EnJeu->Add(Shape); } HorsJeu->Clear();
Il est vrai que l'on peut aussi le faire (probablement plus simple) à l'aide d'un tableau.
Perso, j'aime pas faire simple quand il y a plus compliqué pour éviter les tests et résumer le traitement à ce qui est visible sans être obligé de tout passer en revue !
Donc si j'avais à me justifier, j'invoquerais le gain de temps pour le traitement !
A vérifier sans doute !
Mais... on fait comme on veut !
A plus !
Partager