2

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

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

但是,我注意到 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);
}
4

1 回答 1

2

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

也就是说,你不能分别设置vx和vy,得到你想要的结果。

于 2010-03-28T04:21:21.557 回答