起初问题对我来说似乎很简单,但现在我被卡住了。
方案 我想在我创建的某条路径上移动屏幕上的图像。移动此图像是在一个线程上进行的,例如:
@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方向的速度。
我附上一张图片作为例证。任何帮助表示赞赏。
答案 0 :(得分:1)
如果我清楚地理解你的问题,我就不是真的......
如果您正在寻找将PointA转换为A-B线上的点的功能。
包含两个点的线将具有等式:
-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)
答案 1 :(得分:0)
我认为你会发现API Demos for Animation有用。特别是,请查看Custom Evaluator。