Java 重置Android中不工作的路径

Java 重置Android中不工作的路径,java,android,traveling-salesman,Java,Android,Traveling Salesman,我目前正在开发一个游戏,在这个游戏中,计算机根据旅行商问题算法沿着数组列表中的点绘制一条路径。在每次迭代中,我需要重置上一个路径。目前,迭代生成的每个新路径都在前一条路径的基础上绘制,因此看起来非常混乱。根据android文档,函数path.reset似乎无法正常工作。这是我的代码,有人能指出我哪里出错了吗 //this class draws a line public void CompDrawLine(List test) { // int d = 0; int i=0

我目前正在开发一个游戏,在这个游戏中,计算机根据旅行商问题算法沿着数组列表中的点绘制一条路径。在每次迭代中,我需要重置上一个路径。目前,迭代生成的每个新路径都在前一条路径的基础上绘制,因此看起来非常混乱。根据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(); 
}

在循环中调用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()
        } 

@我想我明白你的意思了。你说重置功能不能工作,但实际上它可以。你没有正确使用它。我只是想解释一下重置是如何工作的。我猜你想用线连接所有的点。如果是这样,您应该使用drawLine,而不是drawPath。
        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()
        }