用processing生成屏保程序

来源:互联网 发布:odk是什么意思网络用语 编辑:程序博客网 时间:2024/05/22 15:58

From My Blog(http://bloglong123king.sourceforge.net/?p=522)

一、想法

利用随机数控制圆圈的大小、位置以及颜色,可以产生随机的美感。

让小球动起来,并且在屏幕边界处产生反弹效果。

二、代码

  1. float circle_x = (float) 0.0;
  2. float circle_y = (float) 0.0;
  3. float circle_radius = (float) 0.0;
  4. int circle_color = 0;
  5.  
  6. public void setup() {
  7.   size(displayWidth, displayHeight);
  8.   background(0);
  9.   frameRate(10);
  10. }
  11.  
  12. public void draw() {
  13.   
  14.   circle_x = random(0, displayWidth);
  15.   circle_y = random(0, displayHeight);
  16.   circle_radius = random(0, (displayWidth + displayHeight) / 20);
  17.   
  18.   circle_color = (int) random(0, 255);
  19.   
  20.   colorMode(RGB, 255);
  21.   fill(0,0,0,5);
  22.   rect(0, 0, displayWidth, displayHeight);
  23.   
  24.   noStroke();
  25.   colorMode(HSB, 255);
  26.   fill(circle_color, 255, 255);
  27.   ellipse(circle_x, circle_y, circle_radius, circle_radius);
  28.     
  29. }


截图

processing_screen_save_static_1

三、生成exe文件

将上述代码粘贴到Processing编辑器中,选择“Export Application”,导出成exe文件。

四、设置为屏幕保护程序

将exe文件更改后缀名为scr,右键->安装。

五、做一些变化

  1. float circle_x = (float) 0.0;
  2. float circle_y = (float) 0.0;
  3. float circle_radius = (float) 0.0;
  4. int circle_color = 0;
  5.  
  6. public void setup() {
  7.     size(displayWidth, displayHeight);
  8.     background(0);
  9.     frameRate(10);
  10. }
  11.  
  12. public void draw() {
  13.     
  14.       circle_x = random(0, displayWidth);
  15.       circle_y = random(0, displayHeight);
  16.       circle_radius = random(0, (displayWidth + displayHeight) / 5);
  17.       
  18.       circle_color = (int) random(0, 255);
  19.       
  20.       colorMode(RGB, 255);
  21. //      fill(0,0,0,5);
  22. //      rect(-1, -1, displayWidth+1, displayHeight+1);
  23.       
  24.       //noStroke();
  25.       colorMode(HSB, 255);
  26.       stroke(circle_color, 255, 255);
  27.       fill(circle_color, 255, 255);
  28.       noFill();
  29.       ellipse(circle_x, circle_y, circle_radius, circle_radius);
  30.       ellipse(circle_x, circle_y, circle_radius-1, circle_radius-1);
  31.         
  32. }

截图

processing_screen_save_static_2

六、运动的泡泡

  1. public static final int circle_nums = 200;
  2.  
  3. class BCircle
  4. {
  5.     public BCircle(float x, float y, float radius, float x_delta, float y_delta, int color) {
  6.         super();
  7.         this.= x;
  8.         this.= y;
  9.         this.radius = radius;
  10.         this.x_delta = x_delta;
  11.         this.y_delta = y_delta;
  12.         this.color = color;
  13.     }
  14.     private float x = (float) 0.0;
  15.     private float y = (float) 0.0;
  16.     private float radius = (float) 0.0;
  17.     
  18.     private float x_delta = (float) 0.0;
  19.     private float y_delta = (float) 0.0;    
  20.     private int color = 0; // 0 - 255
  21.     
  22.     private boolean valueInRange(float val, float min, float max)
  23.     {
  24.         return (val >= min >> val < max);
  25.     }
  26.     
  27.     public void moveOneStep()
  28.     {
  29.         if (valueInRange(x+x_delta, 0, displayWidth) >> 
  30.                 valueInRange(y+y_delta, 0, displayHeight))
  31.         {
  32.             x += x_delta;
  33.             y += y_delta;
  34.         }
  35.  
  36.         if (!valueInRange(x+x_delta, 0, displayWidth))
  37.         {
  38.             x_delta = -x_delta;
  39.             x += x_delta;
  40.         }
  41.         
  42.         if (!valueInRange(y+y_delta, 0, displayHeight))
  43.         {
  44.             y_delta = - y_delta;
  45.             y += y_delta;
  46.         }
  47.             
  48.     }
  49.     
  50.     public void draw(int theme)
  51.     {      
  52.         switch(theme)
  53.         {
  54.             case 1:
  55.             {
  56.                 noFill();
  57.                 colorMode(HSB, 255);
  58.                 stroke(color, 255, 255);
  59.                 ellipse(x, y, radius+2, radius+2);
  60.                 ellipse(x, y, radius+1, radius+1);
  61.                 ellipse(x, y, radius, radius);
  62.             }
  63.             break;
  64.             case 2:
  65.             {
  66.                 colorMode(HSB, 255);
  67.                 fill(color, 255, 255);
  68.                 ellipse(x, y, radius+2, radius+2);
  69.                 ellipse(x, y, radius+1, radius+1);
  70.                 ellipse(x, y, radius, radius);
  71.             }
  72.         }
  73.         
  74.     }
  75. }
  76.  
  77. List<BCircle> circles;
  78.  
  79. public void setup() {
  80.   size(displayWidth, displayHeight);
  81.   background(0);
  82.   frameRate(10);
  83.   
  84.   circles = new ArrayList<BCircle>(circle_nums);
  85. }
  86.  
  87. public void draw() {
  88.   
  89.     colorMode(RGB, 255);
  90.     fill(0,0,0,30);
  91.     rect(-1, -1, displayWidth+1, displayHeight+1);
  92.     
  93.     if (circles.size() < circle_nums)
  94.     {
  95.         float x = random(0, displayWidth);
  96.         float y = random(0, displayHeight);
  97.         float radius = random(20, (displayWidth + displayHeight) / 20);
  98.         float x_delta = random(-50, 50); 
  99.         float y_delta = random(-50, 50);
  100.         int color = (int) random(0, 255);
  101.         BCircle circle = new BCircle(x, y, radius, x_delta, y_delta, color);
  102.         
  103.         circles.add(circle);
  104.     }
  105.     
  106.     for(int i=0;i<circles.size();i++)
  107.     {
  108.         circles.get(i).moveOneStep();
  109.         circles.get(i).draw(1);
  110.     }    
  111. }

两种主题,截图

processing_screen_save_1

processing_screen_save_2

原创粉丝点击