题
我有我的精灵的有些生涩的运动。
基本上,当用户触摸屏幕上的一个点,子画面应该移动到该点。这是工作大多是罚款......它甚至考虑到三角 - 因为帧速率可能不洽
然而,我注意到,在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分开,并得到你想要的结果。
不隶属于 StackOverflow