3 votes

Comment lier le zoom par pincement dans libGDX ?

J'ai essayé de résoudre le problème du zoom par pincement pour un CameraInputController. Je veux qu'il fasse un zoom avant et arrière par rapport à l'origine, mais qu'il soit limité entre 3 et 10. J'ai mis ce bout de code dans la fonction zoom() :

public boolean zoom (float amount) {
if(camera.position.len() < 3 && amount > 0)
{
    return  false;
}
if(camera.position.len() > 10 && amount < 0)
{
    return false;
}
if (!alwaysScroll && activateKey != 0 && !activatePressed)
    return false;
Gdx.app.log("zoom", amount + "");
camera.translate(tmpV1.set(camera.direction).scl(amount));
if (scrollTarget)
    target.add(tmpV1);
if (autoUpdate)
    camera.update();
return true;

}

Cela fonctionne bien si j'appelle simplement la fonction de zoom (par exemple un bouton de zoom), mais lorsque je fais un zoom par pincement, la caméra est capable de faire un zoom avant bien au-delà de 3, et lorsque je fais un zoom arrière, la caméra fait un saut assez radical lorsqu'elle s'approche de 10. Étrangement, le zoom par pincement est très fluide si je n'ai pas ces limites.

Si j'affiche la variable de quantité, le zoom par pincement me donne une gamme de chiffres assez large, quelque chose comme ceci lors du zoom arrière :

-3.4762511    
3.425479
-3.386308
3.353984

et ceci en faisant un zoom avant :

3.6231816
-3.553997
3.8673449
-3.81199

Lorsque je regarde la fonction zoom() à l'intérieur du CameraGestureListener, la valeur du montant varie également en fonction des charges. Si je regarde la fonction pinch(), à chaque fois qu'elle est appelée, la position du pointeur2 alterne entre la position du premier et du deuxième doigt.

Pourrait-il s'agir d'un bug ? Quelqu'un a-t-il une idée de ce qui se passe ? Et comment je peux résoudre ce problème ?

0voto

Josiki Points 18

Je l'ai compris moi-même ! Il s'avère que si vous vérifiez la position de la caméra et que vous la déplacez là où vous le souhaitez dans la fonction render(), plutôt que dans les écouteurs à l'intérieur du contrôleur de la caméra, alors tout fonctionne bien. Je suppose que j'ai un peu trop compliqué les choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X