Pergunta

Eu tenho algum movimento espumoso do meu sprite.

Basicamente, quando o usuário toca um ponto na tela, o sprite deve se mover para esse ponto. Isso está funcionando principalmente bem ... está levando em consideração um delta - porque a taxa de quadros pode não ser consistente.

No entanto, noto que o movimento Y geralmente termina antes do movimento X (mesmo quando as distâncias para viajar são as mesmas), então parece que o sprite está se movendo em uma forma 'L' em vez de uma linha diagonal suave.

Velocidade vertical e horizontal (VX, VY) estão ambos definidos como 300. Alguma idéia do que há de errado? Como posso fazer com que meu sprite se mova em uma linha diagonal suave?

 - (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);
}
Foi útil?

Solução

Você deseja mudar para (TargetX, Targety) de qualquer (x, y) e chegar a ambas as coordenadas ao mesmo tempo (para evitar o "Dogleg"). Portanto, suponha que a velocidade X seja VX e você chegue lá em segundos. Isso significa Vx = (TargetX - X)/T. T deve ser o mesmo para a coordenada y se você quiser um movimento suave para o mesmo ponto ao mesmo tempo, o que significa t = (TargetX - x)/VX e VY devem realmente ser (Targety - y)*VX/(TargetX - x).

Em outras palavras, você não pode definir VX e VY separadamente e obter o resultado desejado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top