Déplacer circulairement une matrice de sprites

Codnpix

il y a 5 ans

Bonjour, 

Je suis en train de m'amuser à faire un casse brique (https://gamebuino.com/fr/creations/casse-brique-evolution), et pour un des niveaux j'ai un ensemble de briques disposées en cercle et je voudrais arriver à les faire tourner autour de ce cercle, comme une ronde de brique un peu... 

Du coup je vois à peu prèscomment déplacer un sprite tout seul autour d'un cercle, mais je n'arrive pas à le faire avec un ensemble de sprites.

Pour l'instant le résultat le plus satisfaisant que j'ai eu c'est d'arriver à déplacer l'ensemble de mon cercle de briques, mais c'est tout le cercle qui se déplace d'un bloc autour d'un autre cercle (qui dépend d'un rayon dont je choisis la valeur arbitrairement)...   Je ne sais pas si c'est très clair. Voici l'extrait du code qui fait ça :

 //brique défilantes en cercle (types 6 et 7)
      if (briques[rangee][colonne].type == 6 || briques[rangee][colonne].type == 7) {
          if (angle >= 360) angle = 0;
          angle += 1;
          briques[rangee][colonne].x = int(cos(angle * PI/180) * radius) + (colonne * BRICK_W + 1) + 1;
          briques[rangee][colonne].y = int(sin(angle * PI/180) * radius) + (rangee * BRICK_H + 1) + 1;
      }

et les briques sont disposées avec une matrice comme ceci (les 0 c'est vide et les 6 c'est mes briques qui doivent tourner) :

{
    {0,0,0,0,0,0,0,0},
    {0,0,0,6,6,0,0,0},
    {0,0,6,0,0,6,0,0},
    {0,0,6,0,0,6,0,0},
    {0,0,6,0,0,6,0,0},
    {0,0,6,0,0,6,0,0},
    {0,0,0,6,6,0,0,0},
    {0,0,0,0,0,0,0,0}
  }

Donc dans mon code tel qu'il est j'ajoute pour chaque brique le cosinus de l'angle en x et le sin de l'angle en y à sa position initiale ((colonne * BRICK_W + 1) + 1 et (rangee * BRICK_H + 1) + 1;) et l'angle s'incrémente de 0 à 360... Donc les briques restent bien disposées comme elles sont au départ, mais c'est l'ensemble de la figure qu'elle forment qui se déplace, et moi je voudrais qu'elle bougent les unes par rapport aux autres en suivant le cercle sur lequel elles sont disposée au départ.

J'espère que je ne suis pas trop embrouillé... Merci d'avance si quelqu'un a un conseil à me donner pour avancer !

jicehel

NEW il y a 5 ans

Je crois que tu devais faire ton initialisation des coordonnées comme tu veux au départ puis pour faire tourner tes briques, tu ferais

briques[rangee][colonne].x = int( briques[rangee][colonne].x * cos(angle * PI/180)   -  briques[rangee][colonne].y * sin(angle * PI/180)) ;
briques[rangee][colonne].y = int( briques[rangee][colonne].x * sin(angle * PI/180)   +  briques[rangee][colonne].y * cos(angle * PI/180)) ;

Après tu devras ajuster avec le rayon du cercle que tu veux, si je ne fais pas d'erreur.