首页 > Sktech > 习作BE_随机字符顺序着色效果
2018
06-05

习作BE_随机字符顺序着色效果

习作BE_随机字符顺序着色效果 - 第1张  | Processing编程艺术


妄图山寨某著名电影的背景效果。
(可以用来做屏保)


– 问题:随机字符的生成方法有待改进
– 问题:在大屏幕使用时时间间隔过于明显 <- 随机触发部分有待改进


[F]:打印当前帧数到控制台
[Q]:退出程序




static final int C_MAX_LIT=0xEE;
static final int C_NORMAL_LIT=0x66;
static final int C_BASIC_LIT=0x33;
static final int C_GRADIENT_LIT=0x11;

int pbRowCount=0;
int pbCharSetCount=0;
float pbTextGrid=0f;

String[] pbCharSet;
EcSingleLine[] pbLines;

void setup(){
  
  //[ use this instead ]::fullScreen(P2D);
  size(320,240);
  frameRate(16);noStroke();
  textAlign(LEFT,TOP);
  //[ change size if necessary]::textSize(22);
  
  pbTextGrid=textAscent()+textDescent();
  pbRowCount=ceil(height/pbTextGrid);
  
  int lpColumnCount=ceil(width/pbTextGrid);
  pbLines=new EcSingleLine[lpColumnCount];
  for(int i=0,s=pbLines.length;i<s;i++){
    pbLines[i]=new EcSingleLine();
    pbLines[i].cmX=i*ceil(pbTextGrid);
    pbLines[i].cmDripHead=ceil(random(1,pbRowCount));
  }//..~
  
  pbCharSetCount=0x79-0x21;//..see the ascii table!!
  pbCharSet=new String[pbCharSetCount];
  for(int i=0,s=pbCharSet.length;i<s;i++){
    pbCharSet[i]=new StringBuilder().append((char)(i+0x21)).toString();
  }//..~
  
}//+++

void draw(){

  background(0);
  
  for(EcSingleLine it:pbLines){
    it.ccUpdate();
    if(random(1f)<0.2){
      it.ccDrip();
    }//..?
  }//..~
  
}//+++

void keyPressed(){switch(key){

  case 'f':println(frameRate);break;
  case 'q':exit();break;
  default:break;

}}//+++

//=== 

class EcSingleLine{
  
  int cmX=0;
  int cmDripHead=0;
  boolean cmDripping;
  
  void ccUpdate(){
    
    cmDripping=cmDripHead<(pbRowCount*2);
    cmDripHead+=cmDripping?1:0;
    
    int lpGreen;
    for(int i=0;i<pbRowCount;i++){
      
      if(i<cmDripHead){
        lpGreen=C_MAX_LIT-(C_GRADIENT_LIT*(cmDripHead-i));
        lpGreen=constrain(lpGreen,C_NORMAL_LIT,C_MAX_LIT);
        fill(C_BASIC_LIT,lpGreen,C_BASIC_LIT);
      }else{
        fill(C_BASIC_LIT,C_NORMAL_LIT,C_BASIC_LIT);
      }//..?
      
      text(
        pbCharSet[ceil(random(0,pbCharSetCount-1))],
        cmX,
        i*pbTextGrid
      );
      
    }//..~
    
  }//+++
  
  void ccDrip(){if(!cmDripping){cmDripHead=0;}}//+++
  
}//***

 



最后编辑:
作者:constrain
nullpointerexception

留下一个回复

你的email不会被公开。