我想把一些精灵放在路上。我考虑计算bezier路径,然后将精灵放在计算点上。但我无法在java方法中找到它。
这是我绘制图像线的主要方法
private List<Sprite> drawStarLine(Point start, Point end, Point control1, Point control2, int starsCount,TextureRegion pTexture) {
ArrayList<Sprite> starsForReturn = new ArrayList<Sprite>();
ArrayList<Point> points = new ArrayList<Point>(generateBezierPath(start, end, control1, control2, starsCount));
for (int i = 0; i < points.size(); i++) {
Point p = points.get(i);
Sprite s = new Sprite((float) p.getX(), (float) p.getY(), pTexture, activity.getVertexBufferObjectManager());
s.setScale(mainScaleX / 2);
starsForReturn.add(s);
}
return starsForReturn;
}
这就是我计算bezier路径的方法
private List<Point> generateBezierPath(Point origin, Point destination, Point control1, Point control2, int segments) {
ArrayList<Point> pointsForReturn = new ArrayList<Point>();
float t = 0;
for (int i = 0; i < segments; i++) {
Point p = new Point();
p.setX(Math.pow(1 - t, 3) * origin.x + 3.0f * Math.pow(1 - t, 2) * t * control1.x + 3.0f * (1 - t) * t * t * control2.x + t * t * t * destination.x);
p.setY(Math.pow(1 - t, 3) * origin.y + 3.0f * Math.pow(1 - t, 2) * t * control1.y + 3.0f * (1 - t) * t * t * control2.y + t * t * t * destination.y);
t += 1.0f / segments;
pointsForReturn.add(p);
}
pointsForReturn.add(destination);
return pointsForReturn;
}
答案 0 :(得分:0)
只需计算二次曲线坐标(对于位置)和切线(对于方向)。代码很简单。
double[] getPoint(double[] x, double[] y, double t) {
double mt = 1-t;
return new double[]{
x[0]*mt*mt + 2*x[1]*mt*t + x[2]*t*t,
y[0]*mt*mt + 2*y[1]*mt*t + y[2]*t*t
};
}
double[] getTangent(double[] x, double[] y, double t) {
double mt = t-1; // note: NOT 1-t
return new double[]{
2*(x[0]*mt - x[1]*(2*t-1) + x[2]*t),
2*(y[0]*mt - y[1]*(2*t-1) + y[2]*t)
};
}
将你的“东西”放在从getPoint
得到的坐标处,然后如果你需要“跟随”你的路径,旋转你的东西,使它的旅行轴与你离开的切线对齐getTangent
。完成。