Comment calculer un déplacement?
H0gS
Messages postés
380
Statut
Contributeur
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour à tous,
Voilà, je vous expose mon problème. J'ai écris une méthode qui calcule le déplacement de mon joueur dans un environnement à 3 dimensions. Cela fonction bien, mais les déplacements diagonaux sont plus rapides. Sans doute une logique trigonométrique que je n'ai pas maîtrisée.
Alors, des suggestions?
Code C++
m_rotY, m_posX, m_posZ sont respectivement : la rotation en Y du joueur, la position en X du joueur et la position en Z du joueur. En respectant que l'axe des X gère la gauche et la droite, l'axe des Z gère l'avant et l'arrière et l'axe des Y gère le haut et le bas.
Merci de votre collaboration.
Hugo.
Voilà, je vous expose mon problème. J'ai écris une méthode qui calcule le déplacement de mon joueur dans un environnement à 3 dimensions. Cela fonction bien, mais les déplacements diagonaux sont plus rapides. Sans doute une logique trigonométrique que je n'ai pas maîtrisée.
Alors, des suggestions?
Code C++
void Player::Move(bool front, bool back, bool left, bool right, float elapsedTime)
{
// Transformer l'angle Y en radian afin de pouvoir appliquer
// les formules trigonométriques
float radY = m_rotY / 180.f * PI;
// Déterminer la velocité de l'axe X et Z
float velX = ((left ? -1.f : 0.f) + (right ? 1.f : 0.f)) * elapsedTime;
float velZ = ((back ? -1.f : 0.f) + (front ? 1.f : 0.f)) * elapsedTime;
// Déterminer la postion en X et Z avec les cos et les sin
m_posX+= velZ * sin(radY) + velX * cos(radY);
m_posZ+= velX * sin(radY) - velZ * cos(radY);
}
m_rotY, m_posX, m_posZ sont respectivement : la rotation en Y du joueur, la position en X du joueur et la position en Z du joueur. En respectant que l'axe des X gère la gauche et la droite, l'axe des Z gère l'avant et l'arrière et l'axe des Y gère le haut et le bas.
Merci de votre collaboration.
Hugo.
A voir également:
- Comment calculer un déplacement?
- Comment calculer la moyenne sur excel - Guide
- Comment déplacer une colonne sur excel - Guide
- Mes deplacement - Guide
- Comment calculer un total sur excel - Guide
- Clémence souhaite faire calculer automatiquement les prix de 30 produits dans trois devises. elle a déjà saisi une formule de calcul pour le tarif du premier produit dans la première devise. corrigez sa formule afin que recopiée vers le bas puis vers la droite, elle remplisse correctement tout le tableau. - Forum Excel
2 réponses
Je ne vois pas pourquoi tu calcules Y avec une rotation...
Si tu prends ta position réelle (m_posX,m_posY,m_posZ) ton move pourrait être :
Evidemment sur ton écran tu ne peux pas avoir de la 3D, donc tu dois prendre en compte ta position sur Z, pour le calcule de affX, et affY. Par exemple :
Si tu prends ta position réelle (m_posX,m_posY,m_posZ) ton move pourrait être :
void Player::Move(bool front, bool back, bool left, bool right, bool bottom, bool top, float elapsedTime)
{
m_posX += ((left ? -1.f : 0.f) + (right ? 1.f : 0.f)) * elapsedTime;
m_posY += ((bottom ? -1.f : 0.f) + (top ? 1.f : 0.f)) * elapsedTime;
m_posZ += ((back ? -1.f : 0.f) + (front ? 1.f : 0.f)) * elapsedTime;
}
Evidemment sur ton écran tu ne peux pas avoir de la 3D, donc tu dois prendre en compte ta position sur Z, pour le calcule de affX, et affY. Par exemple :
float tmpZ = m_posZ/sqrt(2); affX = m_posX - tmpZ; affY = m_posY - tmpZ; plot2d(affX,affY); // peu importe le nom de ta fonction d'affichage