le déplacement d'une image-objet provoque un mouvement saccadé
-
22-09-2019 - |
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);
}
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é.