我目前正在开发一种游戏,其中计算机根据旅行商问题算法沿着arraylist中的点创建路径。每次迭代我都需要重置前一个路径。目前,迭代生成的每个新路径都是在前一个路径上绘制的,所以它看起来都非常混乱。根据android文档,函数path.reset()似乎不能正常工作。这是我的代码,任何人都可以指出我出错的地方吗?
//this class draws a line
public void CompDrawLine(List test) {
// int d = 0;
int i=0;
test.add(test.get(0));
Point c = test.get(i);
for (i=0;i<(test.size()-1);i++) {
cPath.moveTo(c.x,c.y);
c = test.get(i+1);
cPath.lineTo(c.x,c.y);
mCanvas.drawPath(cPath,cPaint);
cPath.reset();
}
// cPath.reset();
invalidate();
}
答案 0 :(得分:0)
在循环中调用moveTo时,其效果与调用reset()相同。 moveTo()设置下一个轮廓的开始,但实际上你只需绘制一个轮廓。我改变了你的代码,你可以看到差异:
int i=0;
test.add(test.get(0));
Point c = test.get(i);
path.moveTo(c.x,c.y); // move this line out of the loop
for (i=0;i<(test.size()-1);i++) {
c = test.get(i+1);
path.lineTo(c.x,c.y);
canvas.drawPath(path,paint);
// path.reset(); // comment out reset()
}
int i=0;
test.add(test.get(0));
Point c = test.get(i);
path.moveTo(c.x,c.y);
for (i=0;i<(test.size()-1);i++) {
c = test.get(i+1);
path.lineTo(c.x,c.y);
canvas.drawPath(path,paint);
path.reset(); // uncomment reset()
}