Processing Java导出PDF仅显示单个盒子的问题咨询
问题分析与修复
你的代码导出PDF时只显示单个盒子,核心问题有两个:
endRaw()位置错误:你把关闭PDF的代码放在了嵌套循环内部,导致画完第一个盒子就立即关闭了PDF文件,后续的盒子根本没机会写入到PDF里。- 样式设置顺序颠倒:
fill()和strokeWeight()放在了box()之后,Processing 绘制图形时会使用当前已有的样式,所以这些设置不会作用到你画的盒子上。
以下是修复后的代码:
import processing.pdf.*; int ofs = 500; boolean record; void setup() { size(1900, 1080, P3D); } void draw() { if (record) { beginRaw(PDF, "box.pdf"); } background(255); translate(width/2, height/2, -800); rotateZ(0.3); rotateY(frameCount/500.0); float x = sin(radians(frameCount*0.1)); // 先设置样式,再绘制图形 fill(155, 150, 90); strokeWeight(3*x); for (int xo = -ofs; xo <= ofs; xo += 100) { for (int yo = -ofs; yo <= ofs; yo += 100) { pushMatrix(); translate(xo, yo, 0); box(200*x); popMatrix(); } } // 所有图形绘制完成后再关闭PDF if (record) { endRaw(); record = false; } } void keyPressed() { if (key == 'r') { record = true; } }
关键修改说明:
- 将
endRaw()和record = false移到了嵌套循环的外面,确保所有盒子都绘制完成后再关闭PDF文件。 - 把
fill()和strokeWeight()移到了循环之前,保证绘制每个盒子时都能应用正确的样式。 - 调整了代码缩进,让逻辑结构更清晰。
这样修改后,按 r 键导出PDF时,就能完整保存当前帧所有的盒子了。
内容的提问来源于stack exchange,提问作者prof
相关产品推荐
相关产品推荐

