1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#include "Asteroid.h"
using namespace std;
/* Initialisation des variable de classe (static) */
SDL_Surface* Asteroid::ListeAnimation[4][135][29] = {{NULL},{NULL},{NULL}};
void CreationListeAnimationAsteroid()
{
/* Cette SDL_Surface servira juste a mettre les bpp des image chargé
au meme niveau que celui de l'ecran */
SDL_Surface *Temporaire = NULL;
/* On commence par les sprite des asteroids */
/* Variables utilisées juste pour le sprite "Asteroid" */
SDL_Surface *Decoupage = NULL;
SDL_Rect positionSprite;
positionSprite.w = 80;
positionSprite.h = 80;
/* On charge et converti l'image */
Temporaire = SDL_LoadBMP("./Ressources/Asteroid/Asteroid.bmp");
if (Temporaire == NULL)
{
cout << "Probleme lors du chargement d'un sprite de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
exit(EXIT_FAILURE);
}
Decoupage = SDL_DisplayFormat(Temporaire);
/* On commence par creer le modele */
for (int i=0 ; i<4 ; i++)
for (int j=0 ; j<29 ; j++)
{
/* Creation de la surface, remplissage et definition de la couleur
transparente pour les trois type d'asteroid */
for (int k=0 ; k<3 ; k++)
{
/* Creation de la surface */
Asteroid::ListeAnimation[i][k*45][j] = SDL_CreateRGBSurface(SDL_HWSURFACE, 32+k*24, 32+k*24, ECRAN_BPP, 0, 0, 0, 0);
if (Asteroid::ListeAnimation[i][k*45][j] == NULL)
{
cout << "Probleme lors de l'allocation d'une surface de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
exit(EXIT_FAILURE);
}
/* remplissage de la couleur de transparence */
SDL_FillRect(Asteroid::ListeAnimation[i][k*45][j], NULL, 0xFF00FF);
/* Definition de la transparence */
SDL_SetColorKey(Asteroid::ListeAnimation[i][k*45][j], SDL_SRCCOLORKEY | SDL_RLEACCEL, 0xFF00FF);
}
/* Choix du sprite a copier depuis le sprite "Asteroid" */
positionSprite.x = j*80;
positionSprite.y = i*80;
SDL_BlitSurface(Decoupage, &positionSprite, Asteroid::ListeAnimation[i][90][j], NULL);
sge_transform(Asteroid::ListeAnimation[i][90][j], Asteroid::ListeAnimation[i][0][j], 0, 0.4, 0.4, 40, 40, 16, 16, 0);
sge_transform(Asteroid::ListeAnimation[i][90][j], Asteroid::ListeAnimation[i][45][j], 0, 0.7, 0.7, 40, 40, 28, 28, 0);
}
/* Une fois le modele créé, on n'a plus besoin de l'image "Asteroid" et de positionSprite */
SDL_FreeSurface(Decoupage);
/* A partir de ce modele, on va creer des serie de sprite comme ceux
du modele mais incliné de 8° a chaque fois */
for (int i=0 ; i<4 ; i++)
for (int j=0 ; j<29 ; j++)
for (int k=1 ; k<45 ; k++)
for (int l=0 ; l<3 ; l++)
{
/* Creation de la surface */
Asteroid::ListeAnimation[i][l*45+k][j] = SDL_CreateRGBSurface(SDL_HWSURFACE, 32+l*24, 32+l*24, ECRAN_BPP, 0, 0, 0, 0);
if (Asteroid::ListeAnimation[i][l*45+k][j] == NULL)
{
cout << "Probleme lors de l'allocation d'une surface de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
exit(EXIT_FAILURE);
}
/* remplissage de la couleur de transparence */
SDL_FillRect(Asteroid::ListeAnimation[i][l*45+k][j], NULL, 0xFF00FF);
/* Definition de la transparence */
SDL_SetColorKey(Asteroid::ListeAnimation[i][l*45+k][j], SDL_SRCCOLORKEY | SDL_RLEACCEL, 0xFF00FF);
/* Appliquation de la rotation */
sge_transform(Asteroid::ListeAnimation[i][90][j], Asteroid::ListeAnimation[i][l*45+k][j], k*8, 0.4+l*0.3, 0.4+l*0.3, 40, 40, 16+l*12, 16+l*12, 0);
}
SDL_FreeSurface(Temporaire);
} |
Partager