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米赛道一分。然后,汽车行驶的距离将很容易转换为显示位置。游戏的基础?否。赛道设计的依据是游戏模型?当然