如何用数组批量创建不同yPos的Gesichter对象及访问类变量?
用数组批量创建Gesichter对象并访问类成员变量
一、使用数组创建20个Gesichter对象
修改主程序代码
将单个对象替换为数组,通过循环初始化20个实例:
Gesichter[] gesichterArray; void settings(){ size(700,700); } void setup(){ // 初始化数组,容量为20 gesichterArray = new Gesichter[20]; // 循环创建每个Gesichter对象,自动生成随机yPos for(int i = 0; i < gesichterArray.length; i++){ gesichterArray[i] = new Gesichter(); } } void draw(){ background(0); // 遍历数组,调用每个对象的绘制和移动方法 for(int i = 0; i < gesichterArray.length; i++){ gesichterArray[i].paint(); gesichterArray[i].move(); } }
修正Gesichter类的构造函数
原构造函数存在逻辑错误:传入的参数未被正确使用,反而给局部变量重新赋值。修改后直接在构造函数内初始化随机位置:
public class Gesichter { float whEllipse = 200; float yPos; float xPos; float xSpeed = 4; float P = 4; // 无参构造函数,初始化随机位置 Gesichter() { this.yPos = random(-whEllipse, height); this.xPos = random(-whEllipse/2, width); } void move() { xPos += xSpeed; yPos += (P*sin(radians(xPos)) + 1); if (xPos >= width + whEllipse/2) { xPos = -whEllipse/2; } if (yPos >= height + whEllipse/2) { yPos = random(-whEllipse, height/2); xPos = random(-200, whEllipse/2); } } void paint() { fill(255, 0, 0); circle(xPos, yPos, whEllipse); } }
二、访问Gesichter类中的whEllipse变量
方式1:直接访问(默认包权限)
Processing中类与主程序默认处于同一包下,whEllipse为包访问权限,可直接通过对象实例访问:
// 示例:在draw()中获取某个对象的椭圆大小 float size = gesichterArray[0].whEllipse; println(size);
方式2:通过Getter方法访问(封装写法)
如果遵循面向对象的封装原则,可将变量设为private并提供公共访问方法:
// 修改Gesichter类 public class Gesichter { private float whEllipse = 200; // 其他属性和方法不变... // 提供getter方法 public float getWhEllipse() { return whEllipse; } }
在主程序中调用getter方法:
float size = gesichterArray[0].getWhEllipse();
内容的提问来源于stack exchange,提问作者Florens Kosicek
相关产品推荐
相关产品推荐

