2010-03-28 83 views
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); 
} 

回答

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並得到你想要的結果。

+0

我想我得到這個,所以x + = vx * dt;和y + =(目標 - y)* vx /(目標x - x)* dt? – 2010-03-28 04:35:01

+0

是的,但如果(targetx - x)= 0,請注意除以零。 – Jim 2010-03-28 15:25:30