gpt4 book ai didi

java - 在路径上移动对象

转载 作者:行者123 更新时间:2023-12-01 04:27:06 26 4
gpt4 key购买 nike

我想在路径上创建移动箭头,如下所示:

moving arrows

如何做到这一点?

编辑:

我已经通过这种方式成功创建了这些移动箭头:我已将路径分为相同的部分,并在每个部分的开头放置了一个箭头。然后所有箭头的位置都会定期更新,当它们结束时,我只是将它们的位置设置为开始。

移动我使用 this example of moving object along path 实现的箭头。现在的问题是我希望箭头位于路径的中间,而不是在其上方或下方。怎么可能做到呢?

这是 onDraw 方法:

@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bmBackground, rSrc, rDest, null);
canvas.drawPath(ptCurve, paint);
//animate the sprite
Matrix mxTransform = new Matrix();
if (iCurStep <= iMaxAnimationStep) {
pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG);
mxTransform.preTranslate(-bmSprite.getWidth(), -bmSprite.getHeight());
canvas.drawBitmap(bmSprite, mxTransform, null);

iCurStep++; //advance to the next step
invalidate();
} else {
iCurStep = 0;
}
}

其中 pm 是 PathMeasure。

最佳答案

我将给出数据类。您需要使用它们来绘图。

您需要一个Position类来保存箭头的位置,它将用于路径。它应该提供对 double 的 x 和 y 的访问特定存储的类型,但也可以转换为 int输入屏幕位置。

接下来,您将拥有 Path类(class)。它可能会有一个 ArrayList<Position>包含路径。您可以使用这些点来绘制线条,这些线条是图形方法中的路径。

然后,您将拥有 Arrow类(class)。我建议给它一个位置而不是输入 Position但如果double 。此外,它应该有一个字段 speed 。在每次更新时添加速度到位置。

出于绘图目的,您仍然需要获取箭头的位置和方向。这需要上课Vector其中有字段 Position positiondouble angle 。那么你需要 Path 中的一个方法, public Vector getVectorAt(double pos) 。此方法应采用 Arrow 的位置属性并返回Vector箭头现在和正在指向的地方。您可以使用回车来绘制它。

我计划一有机会就尝试这个,也许我会稍后更新一些来源。

<小时/>

至于将箭头设置在线条的中心,您可以尝试:

mxTransform.preTranslate(-bmSprite.getWidth()/2, -bmSprite.getHeight()/2);

而不是使用 Matrix.preTranslate(...) 的行。如果没有整个用户类,我无法完全模拟您所拥有的内容,因此这可能不起作用。

关于java - 在路径上移动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18410824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com