Problème de transtypage (ou de pointeur)
Bonjour à tous :)
Voilà j'essaye de programmer un mini moteur physique 2D (mécanique du point simplifiée) avec un ami. On arrive à un assez bon résultat, mais on voudrais recommencer à zéro et le passer en c++ (plus simple à gérer).
Le problème que je rencontre c'est que quand j'initialise une variable d'une de mes instance de la classe balle (sa position), il me sort des choses assez effrayantes (je passe 50.0 en float pour le constructeur, je récupère 3.988e-40 dans la variables que je la passe en Sint16 (la structure qui contient ce nombre attend ce genre de nombre) ou pas). Ce qui fait que l'image de ma balle ne s'affiche tout simplement pas (encore que je soupçonne que ça ne vienne même pas de là...
Voilà la création de l'instance:
Code:
Ball Balle1(1, 1, 0.5, 0.0, 0.0, 10.0, 10.0, 0.3, "cb.bmp");
les coordonnées correspondent au 10.0 et au 10.0;
la classe balle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Ball
{
public:
int sensx, sensy;
int posX, posY;
float bounce, initialVelocityX, initialVelocityY,
initialPosX, initialPosY, speedX, speedY, timeX, timeY;
char spriteName[20];
SDL_Surface *balle;
Ball(int isensx, int isensy, float ibounce, float iinitialVelocityX, float iinitialVelocityY,
float iinitialPosX, float iinitialPosY, float itime, char* iname);
void printBall(SDL_Surface *&screen);
}; |
le constructeur de la balle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Ball::Ball(int isensx, int isensy, float ibounce, float iinitialVelocityX, float iinitialVelocityY,
float iinitialPosX, float iinitialPosY, float itime, char* iname)
{
sensx=isensx;
sensy=isensy;
bounce=ibounce;
initialVelocityX=iinitialVelocityX;
initialVelocityY=iinitialVelocityY;
initialPosX=iinitialPosX;
initialPosY=iinitialPosY;
timeX=itime;
timeY=itime;
strcpy(spriteName, iname);
balle = SDL_LoadBMP(spriteName);
cout <<"Balle créée\n"<<endl;
cout << "nom: "<< spriteName<<endl;
} |
et la methode qui est sensée afficher:
Code:
1 2 3 4 5 6 7 8 9 10
| void Ball::printBall(SDL_Surface *&screen)
{
SDL_Rect dstrect;
dstrect.y = (Sint16)posY; //Le transtypage ne change rien
dstrect.x = (Sint16)posX;
SDL_BlitSurface(balle, 0, screen, &dstrect);
cout<<"printball() appellée"<<endl;
cout <<"x: "<<posX<<endl;
cout << "y: "<<posY<<endl;
} |
Pouvez-vous m'aider?
Merci d'avance :)