移动精灵会导致生涩的运动

时间:2010-03-28 03:46:18

标签: cocos2d-iphone sprite delta

我的精灵有一些生涩的动作。

基本上,当用户触摸屏幕上的某个点时,精灵应移动到该点。这个工作大部分都很好......它甚至考虑了一个增量 - 因为帧速率可能不一致。

然而,我注意到y移动通常在x移动之前完成(即使行进距离相同),因此看起来精灵正在以“L”形状而不是平滑的对角线移动。

垂直和水平速度(vx,vy)都设置为300.任何想法有什么问题?我怎样才能让我的精灵在平滑的对角线上移动?

 - (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);
}

1 个答案:

答案 0 :(得分:2)

你想从任何(x,y)移动到(targetx,targety)并同时到达两个坐标(以避免“狗腿”)。所以,假设x速度是vx,你会在t秒内到达那里。这意味着vx =(targetx - x)/ t。如果你想要同时平滑移动到同一个点,那么y坐标必须相同,这意味着t =(targetx - x)/ vx和vy实际必须是(targety - y)* vx /(targetx - x)。

换句话说,您无法单独设置vx和vy并获得所需的结果。