Processing初步学习(4)

Agent[]agents;

PImage img;

void setup(){
  size(455,643);
  
  img=loadImage("any.png");
  img.resize(width,height);
  
  int num=0;
  for(int x=0;x<width;x+=5){  //数数一共需要多少个点
    for(int y=0;y<height;y+=5){
      if(brightness(img.get(x,y))<250){
        num++;
      }
    }
  }
  
  agents=new Agent[num];  //用刚才的计数num来初始化数组
  int index=0;
  for(int x=0;x<width;x+=5){  //把符合条件的点挨个放入数组
    for(int y=0;y<height;y+=5){
      if(brightness(img.get(x,y))<250){
        agents[index]=new Agent(x,y);
        agents[index].col=img.get(x,y);
        index++;
      }
    }
  }
}

void draw(){
  background(255);
  
  strokeWeight(4);
  
  PVector predator = new PVector(mouseX,mouseY);  //鼠标就是"猎食者"
  for(int i=0;i<agents.length;i++){
    agents[i].runAway(predator);  //逃离猎食者
    stroke(agents[i].col);
    agents[i].update();
    agents[i].display();
  }
}

class Agent{
  PVector target;
  PVector pos;
  PVector spd;
  
  PVector acc;
  color col;
  Agent(float x,float y){
    pos=new PVector(x,y);
    target=pos.copy();
    
    spd=new PVector(0,0);
    acc=new PVector(0,0);
  }
  
  void runAway(PVector predator){  //如果和鼠标的距离小于阈值,转身逃跑
    if(PVector.dist(predator,pos)<50){
      acc=PVector.sub(pos,predator);
      acc.mult(0.3);
      spd.add(acc);
      pos.add(spd);
      
    }
  }
  
  void update(){
    acc=PVector.sub(target,pos);
    acc.mult(0.01);
    spd.add(acc);
    pos.add(spd);
    spd.mult(0.97);
  }
  
  void display(){
    point(pos.x,pos.y);
  }
  
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值