2

問題は最初は非常に単純に思えましたが、今は行き詰まっています。

シナリオ 私が作成した特定のパス上で、画面上の画像を移動したいと考えています。この画像の移動は、次のようなスレッドで行われています。

@Override
    public void run() {
        Canvas c;
        while (run) {
            c = null;
            try {
                c = panel.getHolder().lockCanvas(null);
                  synchronized (panel.getHolder()) {

                    panel.updateImageCoordinates();
                    panel.onDraw(c);


                }
            } finally {
                if (c != null) {
                    panel.getHolder().unlockCanvasAndPost(c);
                }
            }
        }

移動したい画像の場合、移動先の主要なポイントを含むリストがあります。各座標には次のものがあります。

 public class Coordinates {
        private int x = 0;
        private int y = 0;
        private int speedX=0;
        private int speedY=0;
}

たとえば、最初のポイントは -5;-30 で、2 番目のポイント 50.50 に到達する必要があります。画像を描画するための次の座標の計算は updateImageCoordinates() で行われます。私の問題は、点 A から点 B に直線で到達するように、speedX と speedY を計算する方法がわからないことです。基本的に updateImageCoorindates() を実行するたびに、次のことを行う必要があります。

image.currentX= image.currentX+speedX;
image.currentY= image.currentY+speedY
//Check if I reached the B point. if so, move to next point.

座標を知っていても、x 方向と Y 方向の速度を計算する方法がわかりません。

例として画像を添付します。どんな助けでも大歓迎です。 ここに画像の説明を入力

4

2 に答える 2

1

あなたの質問を明確に理解できたかどうかはわかりません...

PointA を線 AB 上の点に変換する関数を探している場合。

両方の点を含む線には方程式があります。

-30 = -5*a + b および 50 = 50*a + b だから b = -250/11 a = 16/11

次のポイントを見つけるには、次のことを行う必要があります。

次のポイントの x が目的のポイントの左 (-1) または右 (+1) にあるかどうかを確認します

次の点を次のように計算します。

image.currentX= image.currentX+((-1 or +1)*movement_speed);
image.currentY= image.currentY+16/11*(-1 or +1)*movement_speed + (-250/11)
于 2011-03-03T19:51:37.827 に答える
0

API Demos for Animation が役に立つと思います。特に、Custom Evaluatorを確認してください。

于 2011-03-03T19:56:04.300 に答える