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:
les coordonnées correspondent au 10.0 et au 10.0;
Code : Sélectionner tout - Visualiser dans une fenêtre à part Ball Balle1(1, 1, 0.5, 0.0, 0.0, 10.0, 10.0, 0.3, "cb.bmp");
la classe balle:
le constructeur de la balle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); };
et la methode qui est sensée afficher:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Partager