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,我需要达到第二个点 50.50。在 updateImageCoordinates() 上计算绘制图像的下一个坐标。我的问题是我不知道如何计算 speedX 和 speedY 以便我从 A 点直线到达 B 点。基本上对于 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 演示很有用。特别是,请查看Custom Evaluator

于 2011-03-03T19:56:04.300 回答