我的精灵有一些生涩的动作。
基本上,当用户触摸屏幕上的某个点时,精灵应移动到该点。这个工作大部分都很好......它甚至考虑了一个增量 - 因为帧速率可能不一致。
然而,我注意到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);
}
答案 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并获得所需的结果。