妄图山寨某著名电影的背景效果。
(可以用来做屏保)
– 问题:随机字符的生成方法有待改进
– 问题:在大屏幕使用时时间间隔过于明显 <- 随机触发部分有待改进
[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;}}//+++
}//***
- 本文固定链接: http://iprocessing.cn/2018/06/05/习作be_随机字符顺序着色效果/
- 转载请注明: constrain 于 Processing编程艺术 发表