Question

J'ai un mouvement saccadé de mon sprite.

En fait, lorsque l'utilisateur touche un point sur l'écran, l'image-objet doit passer à ce moment-là. Cela fonctionne bien ... la plupart du temps, il est même en tenant compte d'un delta -. Parce que le taux d'image ne peut pas être consistantes

Cependant, je remarque que le mouvement y termine habituellement avant le mouvement x (même lorsque les distances à parcourir sont les mêmes), il apparaît comme l'image-objet se déplace dans une forme de « L » plutôt que d'une ligne diagonale lisse.

vertical et vitesse horizontale (vx, vy) sont tous deux sur 300. Toutes les idées ce qui ne va pas? Comment puis-je obtenir mon sprite de se déplacer dans une ligne diagonale lisse?

 - (void)update:(ccTime)dt
{
int x = self.position.x;
int y = self.position.y;

    //if ball is to the left of target point
if (x<targetx)
{
            //if movement of the ball won't take it to it's target position
    if (x+(vx *dt) < targetx)
    {
        x += vx * dt;
    }
    else {
        x = targetx;
    }

} else if (x>targetx) //same with x being too far to the right
{
    if (x-(vx *dt) > targetx)
    {
        x -= vx * dt;
    }
    else {
        x = targetx;
    }

}
if (y<targety)
{
    if (y+(vy*dt)<targety)
    {
        y += vy * dt;
    }
    else {
        y = targety;
    }

} else if (y>targety)
{
    if (y-(vy*dt)>targety)
    {
        y -= vy * dt;
    }
    else {
        y = targety;
    }

}
self.position = ccp(x,y);
}
Était-ce utile?

La solution

Vous voulez passer à (targetx, targetY) de tout (x, y) et arriver à deux coordonnées en même temps (pour éviter le « dogleg »). Ainsi, supposons que la vitesse de x est vx et vous y arriver en quelques secondes t. Cela signifie que vx = (targetx - x) / t. t doit être la même pour la coordonnée y si vous voulez un mouvement régulier au même point en même temps, ce qui signifie que t = (targetx - x) / vx et vy doivent effectivement être (targetY - y) * vx / (targetx -. x)

En d'autres termes, vous ne pouvez pas définir Vx et Vy séparément et obtenir le résultat souhaité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top