Java Processing:for循环双初始化条件添加及指定位置火柴绘制问题
问题解答
1. 在Java Processing中为for循环添加第二个初始化条件
Processing基于Java语法,要给for循环添加多个初始化条件,只需在循环的初始化部分用逗号分隔多个变量的声明或赋值即可,示例如下:
// 同时初始化两个变量i和j for (int i = 0, j = 10; i < 5; i++) { println("i: " + i + ", j: " + j); j--; }
注意:初始化的变量需为同一数据类型,若类型不同,需提前在循环外声明变量。
2. 解决火柴绘制异常问题
问题根源
原代码存在两个关键问题:
- 内层
for循环末尾多了一个分号;,导致循环体为空,后续大括号内的绘制代码仅在循环结束后执行一次; - 位置计算用
dist * posX,当posX=250时,计算出的坐标远超画布宽度(500),火柴被绘制到画布外,视觉上呈现“无法绘制”的效果。
修复方案(不修改numPile相关判断条件)
只需移除内层循环的多余分号,并调整位置计算逻辑,让火柴从传入的posX位置开始按固定间距排列:
void drawMatchPile(int posX, int posY,int matchW, int matchH,int numPile) { matchW= 10; matchH = 50; int matchSpacing = 15; // 火柴间的横向间距,可按需调整 int dist; ellipseMode(RECT); for(numPile= numPile+1; numPile > 0; numPile --) { // 移除内层循环末尾的分号 for(dist =1; (dist < numPile); dist++) { fill(255, 0, 0); // 调整位置:从posX起始,按固定间距排列 ellipse( posX + dist * matchSpacing, posY, matchW+2, matchH * 0.4); fill(#D3C11C); rect( posX + dist * matchSpacing, posY+matchH * 0.35,matchW,matchH); } } }
修复说明
- 移除分号后,内层循环会正常遍历
dist值,每次循环都执行绘制逻辑; - 改用
posX + dist * matchSpacing计算位置,确保火柴从指定的posX开始向右排列,不会因posX值过大导致坐标超出画布。
内容的提问来源于stack exchange,提问作者Johannes Diestel
相关产品推荐
相关产品推荐

