You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用数组批量创建不同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:55:26