-1

ユーザーのタッチ位置に基づいてオブジェクトを新しいx、y位置に移動しようとしていますが、レンガの壁にぶつかりました。

現在、軸の動きを手動でコーディングしていますが、スクリプト化された「x then y」が生成されるため、動きが2乗になります。理想的には、正方形ではなく、タッチ位置への直線的なパスを取得したいと思います。

私の基本的な動きの計算はここにあります:

    //check target not met on x axis
        if(spriteX != spriteTargetX){
            //check if its left or right
            if(spriteTargetX<spriteX){
                spriteX -=spriteSpeed;

            }else{

                spriteX +=spriteSpeed;
            }                               
        }
        if(spriteY != spriteTargetY){
            //check if its up or down
            if(spriteTargetY<spriteY){
                spriteY -=spriteSpeed;
            }else{
                spriteY +=spriteSpeed;
            }                                           
        }

上記のアルゴリズムは常に正方形の動きをもたらします。正直なところ、ある種の距離/角度の計算を実行する必要があるかどうかはわかりません。何か案は?

4

1 に答える 1

0

これを行う簡単な方法の1つは、移動方向を単位ベクトルとして表し、速度を掛けることです。基本的な手順をリストし、あなたが今いる場所とスピードを上げ(1,1)て移動したい場所の例を示します。(4,5)2


  • 目的地と現在の違いを取得します。(diff.xおよびdiff.y)
diff.x = 3
diff.y = 4
  • 目的地から現在までの合計距離を取得します。
dist = 5 ( sqrt(3^2 + 4^2) = 5 )
  • diff.xとdiff.yを距離で割ります
diff.x = 0.6  
diff.y = 0.8
  • diff.xとdiff.yに希望の速度を掛けます
diff.x = 1.2 
diff.y = 1.6
  • スプライトのxとyにそれぞれdiff.xとdiff.yを追加します
sprite.x = 2.2
sprite.y = 2.6
于 2013-03-12T21:21:02.647 に答える