質問

私は私のスプライトの一部ぎくしゃく動きを持っています。

ユーザが画面上のポイントをタッチすると、

基本的に、スプライトは、その点に移動しなければなりません。フレームレートは一貫性ではないかもしれないので、

- これは、ほとんど正常に動作している...それも考慮にデルタを取っています。

しかし、私は、スプライトが滑らか対角線ではなく、「L」状に移動しているようにそれが表示されるように、Y運動は、通常、(旅行までの距離が同じであっても)Xの移動前に終了することを確認します。

垂直方向と水平方向の速度(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。 / VXとVY実際なければならない(targety - Y)* VX /(targetx - tはそう手段T =(X targetx)は、あなたが同時に同じ地点に滑らかな動きをする場合はy座標で同じでなければなりません - X)

言い換えれば、あなたはVXを設定し、VY別に、あなたが望む結果を得ることができません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top