Java PathIterator中while循环的函数是什么?

Java PathIterator中while循环的函数是什么?,java,Java,试图在上面的链接中研究此代码,但我在理解以下代码时遇到困难: float[] coords=new float[6]; while (!iter.isDone()) { iter.currentSegment(coords); int x=(int)coords[0]; int y=(int)coords[1]; points.add(new Point(x,y)); iter.next();

试图在上面的链接中研究此代码,但我在理解以下代码时遇到困难:

    float[] coords=new float[6];
    while (!iter.isDone()) {
        iter.currentSegment(coords);
        int x=(int)coords[0];
        int y=(int)coords[1];
        points.add(new Point(x,y));
        iter.next();
    }
浮点数组的用途是什么,为什么有6,以及它如何在while循环中递增以沿形状路径移动对象?

对于上下文,iter是FlattingPathIterator的一个实例,这对于解释所有iter调用非常重要

浮动[]坐标=新浮动[6];初始化具有6个索引的新浮点数组,默认值为0.0f

   while (!iter.isDone()) {
        ...
        iter.next();
    }
这里iter是一个PathIterator实例。因此iter.next将迭代器指针移动到迭代器中的下一项,iter.isDone检查迭代器中是否还有剩余内容

最后,国际热核聚变实验堆;将当前迭代器段的内容加载到coords数组。

路径由多个段定义,这些段可以是:

SEG_闭合0坐标 SEG_移动到2个坐标:x,y SEG_LINETO 2坐标:x,y SEG_QUADTO 4坐标:x1、y1、x2、y2 SEG_CUBICTO 6坐标:x1、y1、x2、y2、x3、y3 SEG_LINETO、SEG_QUADTO和SEG_CUBICTO段也有一个隐式起点:前一段的终点

例如,三角形可以由以下元素组成:

GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(15, 20);
path.lineTo(20,  8);
path.close();
暂时!iter.done{}循环依次处理路径的每一段,从SEG_MOVETO开始,接着是SEG_LINETO,第二个SEG_LINETO,最后是SEG_CLOSE

coords[]数组用作currentSegment调用输出的临时存储器。临时存储阵列将被覆盖,而不是在返回时为每个段分配存储。由于立方体线段需要3个点6个坐标,因此数组大小必须至少为6

您发布的代码包含一个隐式假设,即仅存在SEG_MOVETO/SEG_LINETO类型段,因此只有coord[0]和coord[1]才有效。这似乎是一个安全的假设,因为链接文本(而不是问题文本)中显示的FlattingPathIterator永远不会返回曲线段。但是,它还包括一个更危险的假设,即SEG_CLOSE段永远不会出现,它有0个坐标,可能会导致垃圾损坏结果点列表

更好的代码可能更像:

float[] coords = new float[6];
while(!iter.done()) {
    int type = iter.currentSegment(coords);
    if (type == SEG_MOVETO || type == SEG_LINETO) {
      int x = (int) coords[0];
      int y = (int) coords[1];
      points.add(new Point(x,y));
    } else if (type == SEG_CLOSE) {
      // Handling sub-path closing here
    }
    iter.next();
}

这段代码的基础将是一个很好的开始,使轨道车游戏。我想在一条赛道上构建一个多车多人应用程序,该应用程序将具有不同的速度。除其他因素外,gui将与此程序非常相似。@AJNeufeld这将是AJ的一个问题。我理解迭代器的概念,并阅读API。AJ似乎真正理解了它在更高层次上要做的事情。这段代码的基础是制作一款轨道车游戏的良好开端吗。我想构建一个MultiitPlayer应用程序,在一条赛道上有多辆车,速度不同。其他因素,gui将与此程序非常相似。FlattingPathIterator将曲线段替换为许多短直线段。如果您的赛道有直线,这些将原封不动地返回。这意味着返回点之间的距离可能变化很大。如果以恒定速率遍历返回点,则速度将发生变化。您的游戏可能需要对返回的分数进行后期处理,以根据您自己的标准生成一组新的分数,例如每10米赛道一分。然后,汽车行驶的距离将很容易转换为显示位置。游戏的基础?否。赛道设计的依据是游戏模型?当然