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);
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top