Historique des modifications - Message

Message #10727

Sujet: Test de gravité - Irrlicht + Newton


Type Date Auteur Contenu
Dernière modification 26-08-2012 14:07:28 Kaze
Alors j'ai beaucoup de nouveaux problèmes ou questions désormais. Je vais d'abord montrer mon code avant de poser les questions.

physics.cpp (juste la partie des events)

Code c++ :


bool Physics::Down(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.X += 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Left(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.Z -= 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Right(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.Z += 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Up(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.X -= 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Jump(){
    
    float masse;
    float inertieX;
    float inertieY;
    float inertieZ;
    float force[3];
    NewtonBodyGetMassMatrix (newtonPlayer, &masse, &inertieX, &inertieY, &inertieZ);
    
    force[0] = 0.0f;
    force[1] = 60000.0;
    force[2] = 0.0f;
    
    NewtonBodySetForce(newtonPlayer, force);
    return true;
}


evenement.cpp (juste la partie des events)

Code c++ :


bool Evenement::OnEvent(const irr::SEvent& event){
    
    if(event.EventType == irr::EET_MOUSE_INPUT_EVENT)
	{
        if(event.MouseInput.Event == irr::EMIE_LMOUSE_PRESSED_DOWN)
        {
            newton->Cube(irr::core::vector3df(0,50,25), irr::core::vector3df(40,40,40), 100.0);
		    return true;
        }
	}
	
    if(event.EventType == irr::EET_KEY_INPUT_EVENT)
	{
        switch(event.KeyInput.Key){
           
            case irr::KEY_DOWN :
                 return newton->Down();
                 break;
            
            case irr::KEY_LEFT :
                 return newton->Left();
                 break;
                 
            case irr::KEY_RIGHT :
                 return newton->Right();
                 break;
                 
            case irr::KEY_UP :
                 return newton->Up();
                 break;
                 
            case irr::KEY_KEY_J :
                 return newton->Jump();
                 break; 
        }
	}
    return false;
}


Alors quand j'éxécute mon code il fonctionne mais avec des défauts :

1 : lorsque j'appuie sur une des flèches, mon cube effectue un mouvement de 8 pixels (comme demandé) puis il a un petit temps immobile, et enfin il comprend que j'appui toujours sur la flèche donc il fait un mouvement continue. Y aurait-il un moyen de couper se temps de latence ?

2 : lorsque après un mouvement latéral, je rencontre un cube déjà présent, le cube que je contrôle passe au travers alors qu'il y est censé avoir collision. Comment faire pour appliquer la collision sur les coté du cube ?

3 : pour faire sauter le cube, j'applique une force verticale de 60000. Mais rien à faire le cube ne se déplace absolument pas en hauteur. J'ai essayé toutes les combinaisons entre NewtonBodySetForce et NewtonBodyAddForce sans qu'aucune ne fonctionne. Comment faire sauter mon petit cube ?

4 : lorsque j'appuie sur deux flèches en même temps (haut ou bas + gauche ou droite), mon cube se déplace diagonalement. Mais lorsque j'appuie sur un flèche directionnelle puis sur une autre quelques instants après (tout en gardant appuyé la première), mon cube se déplace d'abord dans la première direction puis dans la deuxième. Y a-t-il un moyen de faire qu'en appuyant sur une flèche puis sur une autre (tout en gardant appuyé la première), mon cube fasse d'abord un mouvement dans la première direction puis dans la diagonale qui correspond à la somme des deux mouvements des deux flèches ?

J'espère avoir été clair pour les questions. Merci d'avance pour votre aide.
Création du message 26-08-2012 14:05:39 Kaze
Alors j'ai beaucoup de nouveaux problèmes ou questions désormais. Je vais d'abord montrer mon code avant de poser les questions.

physics.cpp (juste la partie des events)

Code c++ :


bool Physics::Down(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.X += 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Left(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.Z -= 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Right(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.Z += 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Up(){
    
    irr::core::matrix4 matPlayer;
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    Physics::positionPlayer.X -= 8;
    matPlayer.setTranslation(Physics::positionPlayer);
    NewtonBodySetMatrix(newtonPlayer, matPlayer.pointer());
    return true;
}

bool Physics::Jump(){
    
    float masse;
    float inertieX;
    float inertieY;
    float inertieZ;
    float force[3];
    NewtonBodyGetMassMatrix (newtonPlayer, &masse, &inertieX, &inertieY, &inertieZ);
    
    force[0] = 0.0f;
    force[1] = 60000.0;
    force[2] = 0.0f;
    
    NewtonBodySetForce(newtonPlayer, force);
    return true;
}


evenement.cpp (juste la partie des events)

Code c++ :


bool Evenement::OnEvent(const irr::SEvent& event){
    
    if(event.EventType == irr::EET_MOUSE_INPUT_EVENT)
	{
        if(event.MouseInput.Event == irr::EMIE_LMOUSE_PRESSED_DOWN)
        {
            newton->Cube(irr::core::vector3df(0,50,25), irr::core::vector3df(40,40,40), 100.0);
		    return true;
        }
	}
	
    if(event.EventType == irr::EET_KEY_INPUT_EVENT)
	{
        switch(event.KeyInput.Key){
           
            case irr::KEY_DOWN :
                 return newton->Down();
                 break;
            
            case irr::KEY_LEFT :
                 return newton->Left();
                 break;
                 
            case irr::KEY_RIGHT :
                 return newton->Right();
                 break;
                 
            case irr::KEY_UP :
                 return newton->Up();
                 break;
                 
            case irr::KEY_KEY_J :
                 return newton->Jump();
                 break; 
        }
	}
    return false;
}


Alors quand j'éxécute mon code il fonctionne mais avec des défauts :

1 : lorsque j'appuie sur une des flèches, mon cube effectue un mouvement de 8 pixels (comme demandé) puis il a un petit temps immobile, et enfin il comprend que j'appui toujours sur la flèche donc il fait un mouvement continue. Y aurait-il un moyen de couper se temps de latence ?

2 : lorsque après un mouvement latéral, je rencontre un cube déjà présent, le cube que je contrôle passe au travers alors qu'il y est censé avoir collision. Comment faire pour appliquer la collision sur les coté du cube ?

3 : pour faire sauter le cube, j'applique une force verticale de 60000. Mais rien à faire le cube ne se déplace absolument pas en hauteur. J'ai essayé toutes les combinaisons entre NewtonBodySetForce et NewtonBodyAddForce sans qu'aucune ne fonctionne. Comment faire sauter mon petit cube ?

4 : lorsque j'appuie sur deux flèches en même temps (haut ou bas + gauche ou droite), mon cube se déplace diagonalement. Mais lorsque j'appuie sur un flèche directionnelle puis sur une autre quelques instants après (tout en gardant appuyé la première), mon cube se déplace d'abord dans la première direction puis dans la deuxième. Y a-t-il un moyen de faire qu'en appuyant sur une flèche puis sur une autre (tout en gardant appuyé la première), mon cube fasse d'abord un mouvement dans la première direction puis dans la diagonale qui correspond à la somme des deux mouvements des deux flèches ?

J'espère avoir été clair pour les questions. Merci d'avance pour votre aide.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
230 invités en ligne
membre en ligne: -
RSS Feed