Canvas Gravité et Détection... [Résolu]

Signaler
Messages postés
39
Date d'inscription
lundi 10 avril 2017
Statut
Membre
Dernière intervention
8 mai 2017
-
Messages postés
1784
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
28 avril 2021
-
Bonjour,
J'ai recréé une sorte de flappy bird, qui fonctionne très bien mais il y a dans le code un petit détail qui me chiffonne.
Mon code fait 240 lignes environ donc je vais seulement copier les bouts propres au problème.
Je précise que pac et stru sont deux objets, pac est l'oiseau et stru le sol.
Je souhaite tester quand pac touche stru afin de créer un effet de rebond. Pour celà j'ai ecris une fonction touchBottom.
Voici la condition :
function touchBottom(a, b) {
       
    if (a.y + a.height/2 >= b.y) {
        if (a.x + a.height/2 >= b.x && a.x - a.height/2 <= b.x + b.width) {
            return true;
        }
    }
}

Voici le test :
//touch or not 
    if (touchBottom(pac, stru)) {
        pac.y = stru.y - pac.height/2;
        sGravity = - (sGravity * pac.bounce);
    } if (touchCanvasTop(pac)) {
        pac.y = pac.height/2;
    } 

PS: x et y de l'objet pac sont au centre de celui-ci.

Bref. Ce qui se passe avec cette fonction de verification c'est qu'elle verifie la position de pac après que pac soit dessiné sur le canvas. Ce qui ramène à mon problème : même avec une update 60x par secs j'arrive à voir l'objet pac à demi dans le sol... Celà car la gravité fait augmenter sa vitesse de chute et donc lorsque pac tombe de haut, il peut arriver sur le sol (stru) avec une vitesse de par exemple 11px par 1000/60s et alors il peut être sous le y de stru avant d'être translate pile à l'ordonnée y de stru...
Et jaimerais que ça ne puisse pas arriver... Que jamais pac ne puisse être dans stru. J'espère que j'ai bien expliqué, merci d'avoir lu.
PS: j'avais pensé à verifier non pas les coordonnés actuelles de l'objet pac mais celle qui suivront...

1 réponse

Messages postés
1784
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
28 avril 2021
128
bonjour

pour évité ceci fait un teste de position juste avant de deplacer l'element si la position calculé est supérieur a la position du sol positionne l'element comme tu le souhaite