基于Processing实现《黑客帝国》代码雨

他来了,他来了,初中的时候看了《黑客帝国》,简直太震撼了,从拍摄的角度来说,里面的特效领先现今国内电影特效几条街,而且还是20年轻的事情了。里面最让我印象深刻的就是代码雨特效,记忆犹新啊,现在从事程序员有很大的原因是看了代码雨,感觉代码真的是无所不能。哈哈哈!!
电影特效:
在这里插入图片描述
在这里插入图片描述
processing 特效:
在这里插入图片描述
上源码:

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(500,500);
  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;}}
}
发布了69 篇原创文章 · 获赞 37 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/xi_gua_gua/article/details/105206687
今日推荐