我有我的精灵的有些生涩的运动。

基本上,当用户触摸屏幕上的一个点,子画面应该移动到该点。这是工作大多是罚款......它甚至考虑到三角 - 因为帧速率可能不洽

然而,我注意到,在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);
}
有帮助吗?

解决方案

您想从任何(X,Y)移动到(targetx,targety),并在同一时间两个坐标到达(避免“狗腿”)。因此,假设在x速度VX和你到达那里在t秒。这意味着VX =(targetx - X)/吨。 T必须是在y如果你想平稳的运动,以在同一时间同一地点的坐标相同,从而使设备t =(targetx - X)/ VX和VY必须实际上是(targety - Y)* VX /(targetx - x)的

在换句话说,你不能设置VX和VY分开,并得到你想要的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top