
本文介绍如何通过封装函数来批量生成并添加多个独立的图形对象(如矩形),解决直接复用同一实例导致的位置覆盖、颜色失效等常见问题。
本文介绍如何通过封装函数来批量生成并添加多个独立的图形对象(如矩形),解决直接复用同一实例导致的位置覆盖、颜色失效等常见问题。
在手绘像素图等场景中,频繁手动创建相同尺寸、相似样式的图形(如 Rectangle)极易出错且效率低下。你可能会尝试将一个图形实例赋值给 const 变量后多次调用 add(),但结果却只显示一个移动后的图形——这是因为 add() 并非“克隆并添加”,而是将同一个对象实例加入画布;后续调用 setPosition() 或 setColor() 会修改该实例的状态,所有引用都指向它,因此视觉上仅表现为位移或变色,而非新增图形。
正确的做法是:每次都需要创建一个全新的、独立的图形对象。为此,推荐封装一个工厂函数(Factory Function),根据传入参数动态生成并配置新实例:
function getColoredRectangle(color, x, y, width = 10, height = 10) {
const rect = new Rectangle(width, height);
rect.setPosition(x, y);
rect.setColor(color);
return rect;
}
// 使用示例:添加两个彼此独立的灰色方块
add(getColoredRectangle("#686968", 100, 400));
add(getColoredRectangle("#686968", 110, 400));
// 甚至可轻松混用不同颜色与尺寸
add(getColoredRectangle("#FF5733", 120, 390, 8, 8));
✅ 优势说明:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 每次调用 getColoredRectangle() 都返回全新对象,互不影响;
- 支持默认参数(如宽高设为 10),减少冗余输入;
- 易于扩展:可追加边框、透明度、旋转等配置项;
- 符合函数式编程思想,提升代码可读性与可维护性。
⚠️ 注意事项:
- 切勿对返回的对象再次复用(如 const r = getColoredRectangle(...); add(r); add(r);),这仍会导致覆盖问题;
- 若图形库支持 .clone() 方法(如某些 Canvas 封装库),也可作为替代方案,但原生 Rectangle(如 p5.js 或类似教学环境中的类)通常不提供,故函数封装是最通用、最可靠的方式;
- 坐标 x/y 应代表每个图形的左上角基准点(具体以所用图形库文档为准),确保像素对齐精度。
通过这一模式,你不仅能大幅提升像素画制作效率,还能为后续更复杂的图形批量操作(如网格生成、动画序列)打下坚实基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










