如何实现每次点击按钮时新增一个独立的矩形对象?
问题根源
你当前的代码有两个核心错误导致无法生成多个矩形:
- 按钮点击回调中仅创建了矩形对象赋值给全局
rect变量,没有将新创建的矩形添加到存储用的rectList数组中,每次点击都会覆盖之前的rect值,自然只有最新的一个生效 draw方法里的绘制逻辑冗余重复,rect全局变量完全没有保留的必要,所有矩形都应该统一存到rectList中统一绘制
修正后的代码
import controlP5.*; ControlP5 cp5; Button rc; ArrayList<Rectangle> rectList; void setup(){ size(1000, 1000); rectList = new ArrayList<Rectangle>(); cp5 = new ControlP5(this); rc = cp5.addButton("Rectangle"). setPosition(5, 4). setColorBackground(color(52, 55, 76)); rc.onRelease(new CallbackListener() { public void controlEvent(CallbackEvent theEvent) { // 每次点击创建新矩形,直接加入ArrayList Rectangle newRect = new Rectangle(100, 100, 100, 100); rectList.add(newRect); } }); } void draw(){ background(255); // 统一遍历List绘制所有矩形,不需要额外判断单独的rect变量 for(Rectangle r : rectList){ r.displayRect(); // 如果你Rectangle类的displayRect已经实现了绘制逻辑,可以删掉下面这行原生rect调用 rect(r.getXvalue(), r.getYvalue(), r.getWvalue(), r.getHvalue()); } }
补充说明
- 如果希望每次生成的矩形位置不重叠,可以在创建
Rectangle的时候把坐标参数改成随机值,比如new Rectangle(random(0, width-100), random(0, height-100), 100, 100) - 原来的
showRect方法冗余重复,已经整合到draw的遍历逻辑中,不需要额外保留
内容的提问来源于stack exchange,提问作者bana
相关产品推荐
相关产品推荐

