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 - バツ)。

つまり、vxとvyを別々に設定して、希望する結果を得ることができません。

于 2010-03-28T04:21:21.557 に答える