muovere uno sprite provoca movimento a scatti
-
22-09-2019 - |
Domanda
Ho un po 'di movimento a scatti del mio sprite.
In pratica, quando l'utente tocca un punto dello schermo, lo sprite dovrebbe andare su tale punto. Questo è il lavoro per lo più bene ... sta anche tenendo conto di un delta -. Perché il frame rate non può essere consistant
Tuttavia, noto che il movimento y generalmente finisce prima del movimento x (anche quando le distanze di viaggiare sono gli stessi), in modo che appaia come sprite si muove in una forma 'L' piuttosto che una linea diagonale liscio.
verticale e velocità orizzontale (Vx, Vy) sono entrambe impostate su 300. Tutte le idee che cosa c'è che non va? Come posso fare per ottenere la mia sprite a muoversi in una linea diagonale liscio?
- (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);
}
Soluzione
Si desidera spostare (TargetX, targetY) da ogni (x, y) e arrivare a entrambe le coordinate, allo stesso tempo (per evitare il "dog-leg"). Così, supponiamo che la velocità x è vx e si ottiene lì in t secondi. Ciò significa che vx = (TargetX - x) / t. t deve essere la stessa per la coordinata y se si desidera regolare il movimento allo stesso punto, allo stesso tempo, in modo che significa t = (TargetX - x) / vx e vy trovino effettivamente (targetY - y) * vx / (TargetX -. x)
In altre parole, non è possibile impostare VX e vy separatamente e ottenere il risultato desiderato.