- [x] Gestion velocite pour deplacement
- [x] Gestion de l'acceleration - [x] Gestion de la gravite
This commit is contained in:
parent
b6f1715efc
commit
49e3a04a4c
BIN
SDL#4/main.o
BIN
SDL#4/main.o
Binary file not shown.
|
@ -1,21 +1,20 @@
|
|||
A FAIRE
|
||||
=======
|
||||
- [ ] Ajout d'objets et non uniquement de SDL_Textures au xManager
|
||||
- [ ] Optimisation de update() pas dans boucle infinie, juste dans push/pull avec limitation FPS
|
||||
- [x][ ] Gestion du saut unique ou double (limitation)
|
||||
- [ ] Gestion de l'acceleration
|
||||
- [ ] Gestion de la gravite
|
||||
- [ ] Erreur de hit()
|
||||
|
||||
EN COURS
|
||||
========
|
||||
- [ ] Optimisation/Correction des collisions
|
||||
- [ ] Erreur de hit()
|
||||
- [ ] Liberation memoire car lag
|
||||
- [ ] Gestion sprites de mario en fonction mouvement
|
||||
- [...] Gestion velocite pour deplacement
|
||||
- [...] Gestion sprites de mario en fonction mouvement
|
||||
|
||||
FAIT
|
||||
====
|
||||
- [x] Gestion velocite pour deplacement
|
||||
- [x] Gestion de l'acceleration
|
||||
- [x] Gestion de la gravite
|
||||
- [x] Erreur plus lent vers la droite
|
||||
- [x] Creation des briques
|
||||
- [x] Refactor xAnimation extends xSprite
|
||||
|
@ -27,4 +26,6 @@ FAIT
|
|||
- [x] Index literaux pour ajouter au manager
|
||||
- [x] Auto-texture pour le bloc mystere
|
||||
- [x] Auto-texture pour le mario (avec mvmts)
|
||||
- [x] Auto-texture pour le sol (grass)
|
||||
- [x] Auto-texture pour le sol (grass)
|
||||
|
||||
- [ABORT] Optimisation de update() pas dans boucle infinie, juste dans push/pull avec limitation FPS
|
|
@ -21,22 +21,22 @@ xMarioMario::xMarioMario(xManager *m, int x, int y)
|
|||
// Position frame par defaut
|
||||
_pos = "NR"; // bottom-center
|
||||
|
||||
_gravity = 13;
|
||||
_gravity = 19;
|
||||
|
||||
// Constantes de velocite sur X
|
||||
_velocity[0] = 0.0;
|
||||
_mult[0] = 10;
|
||||
_dec[0] = 1;
|
||||
_acc[0] = 5;
|
||||
_dec[0] = .7;
|
||||
_acc[0] = .6;
|
||||
_min_vel[0] = 0.1;
|
||||
_max_vel[0] = 40;
|
||||
_max_vel[0] = 10;
|
||||
|
||||
// Constantes de velocite sur Y
|
||||
_velocity[1] = 0.0;
|
||||
_mult[1] = 50;
|
||||
_dec[1] = 1;
|
||||
_acc[1] = 10;
|
||||
_min_vel[1] = 0.1;
|
||||
_dec[1] = .3;
|
||||
_acc[1] = 2;
|
||||
_min_vel[1] = 0.2;
|
||||
_max_vel[1] = 100;
|
||||
|
||||
/**/// this->addFrame( (SDL_Rect){2, 0, 19, 29} );
|
||||
|
@ -66,11 +66,21 @@ xMarioMario::xMarioMario(xManager *m, int x, int y)
|
|||
|
||||
/* [MOVEFROMVELOCITY] Applique la velocite au deplacement
|
||||
=========================================================*/
|
||||
void xMarioMario::moveFromVelocity(){
|
||||
void xMarioMario::moveFromVelocity(){
|
||||
|
||||
/* (2) Si aucune collision, on deplace */
|
||||
this->move(_velocity[0], _velocity[1]);
|
||||
cout << "x -> " << _velocity[0] << endl;
|
||||
cout << "y -> " << _velocity[1] << endl;
|
||||
|
||||
/* (3) Modification du sprite en fonction du mouvement */
|
||||
this->turn();
|
||||
|
||||
|
||||
/* (1) Gestion de touche encore enfoncee */
|
||||
if( _left ) this->velocity(-1, 0);
|
||||
else if( _right ) this->velocity(1, 0);
|
||||
else _velocity[0] *= ( 1 - _dec[0] );
|
||||
|
||||
// Si touche haut
|
||||
if( _up ){
|
||||
|
@ -81,40 +91,32 @@ void xMarioMario::moveFromVelocity(){
|
|||
}
|
||||
}else
|
||||
_jumps = 0;
|
||||
|
||||
|
||||
/* (2) Si aucune collision, on deplace */
|
||||
this->move(_velocity[0], _velocity[1]);
|
||||
|
||||
/* (3) Modification du sprite en fonction du mouvement */
|
||||
this->turn();
|
||||
|
||||
|
||||
/* (4) On diminue la velocite (decceleration) */
|
||||
_velocity[0] *= ( 1 - _dec[0] );
|
||||
_velocity[1] *= ( 1 - _dec[1] );
|
||||
|
||||
|
||||
/* (5) Gestion de la gravite */
|
||||
if( !this->onFloor() )
|
||||
this->move(0, 13);
|
||||
this->move(0, _gravity);
|
||||
|
||||
/* (6) Si velocite sous borne min */
|
||||
if( _velocity[0] < _min_vel[0] ) // sur x
|
||||
if( abs(_velocity[0]) < _min_vel[0] ) // sur x
|
||||
_velocity[0] = 0;
|
||||
|
||||
if( _velocity[1] < _min_vel[1] ) // sur y
|
||||
if( abs(_velocity[1]) < _min_vel[1] ) // sur y (gravite)
|
||||
_velocity[1] = 0;
|
||||
|
||||
|
||||
/* (7) Gestion du temps */
|
||||
if( abs(_velocity[0]) > 0 )
|
||||
cout << "x -> " << _velocity[0] << endl;
|
||||
// if( abs(_velocity[0]) > 0 )
|
||||
// cout << "x -> " << _velocity[0] << endl;
|
||||
|
||||
if( abs(_velocity[1]) > 0 )
|
||||
cout << "y -> " << _velocity[1] << endl;
|
||||
// if( abs(_velocity[1]) > 0 )
|
||||
// cout << "y -> " << _velocity[1] << endl;
|
||||
|
||||
usleep(1);
|
||||
// cout << endl;
|
||||
usleep(20000);
|
||||
}
|
||||
|
||||
|
||||
|
@ -141,16 +143,20 @@ double xMarioMario::velocity(bool way){
|
|||
void xMarioMario::velocity(double x, double y){
|
||||
double last[] = { _velocity[0], _velocity[1] };
|
||||
|
||||
// Vrai si on change pas de sens sur X
|
||||
bool sameway_x = (last[0]*x) > 0;
|
||||
// Vrai si on change pas de sens sur y
|
||||
bool sameway_y = (last[1]*y) > 0;
|
||||
|
||||
/* (1) Gestion velocite axe X */
|
||||
if( last[0]*x > 0 ) // Si meme sens, on accelere
|
||||
_velocity[0] *= _acc[0];
|
||||
if( sameway_x ) // Si meme sens, on accelere
|
||||
_velocity[0] *= (1+_acc[0]);
|
||||
else
|
||||
_velocity[0] += x * _mult[0];
|
||||
|
||||
|
||||
/* (2) Gestion velocite axe Y */
|
||||
if( last[1]*y > 0 ) // Si meme sens, on accelere
|
||||
_velocity[1] *= _acc[1];
|
||||
if( sameway_y ) // Si meme sens, on accelere
|
||||
_velocity[1] *= (1+_acc[1]);
|
||||
else
|
||||
_velocity[1] += y * _mult[1];
|
||||
|
||||
|
@ -194,7 +200,7 @@ void xMarioMario::turn(){
|
|||
|
||||
|
||||
/* (1) Vers le haut */
|
||||
if( up ){
|
||||
if( up && !this->onFloor() ){
|
||||
|
||||
/* (1.2) HAUT - CENTRE */
|
||||
if( centerx ){ // tc
|
||||
|
@ -246,7 +252,7 @@ void xMarioMario::turn(){
|
|||
|
||||
|
||||
/* (2.2) BAS - CENTRE */
|
||||
if( centerx ){ // bc
|
||||
if( centerx && !this->onFloor() ){ // bc
|
||||
if( _pos != "BC" ){
|
||||
this->pull();
|
||||
this->clear();
|
||||
|
|
|
@ -97,7 +97,8 @@ bool xManager::setImage(const char *url){
|
|||
bool xManager::hit(SDL_Texture *current, int movex, int movey){
|
||||
// Anti conflit inter-thread
|
||||
_mutex_hit.lock();
|
||||
|
||||
|
||||
|
||||
/* (1) On recupere le SDL_Rect destination du sprite courant */
|
||||
int xIndex = -1;
|
||||
for( int i = 0 ; i < _sprites.size() ; i++ )
|
||||
|
@ -126,7 +127,7 @@ bool xManager::hit(SDL_Texture *current, int movex, int movey){
|
|||
_mutex_hit.unlock();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (3) On compare avec toutes les autres textures */
|
||||
for( int i = 0 ; i < _sprites.size() ; i++ ){
|
||||
|
|
Loading…
Reference in New Issue