home games dev
Lewpen.com»Research & Development»Animation»Java Effects»2D Blobs

2D Blobs

/ Site3D.java

import java.awt.image.*;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Event;
import java.awt.Image;
import java.awt.Font;
import java.util.Vector;  //  http://java.sun.com/products/jdk/1.1/docs/api/java.util.Vector.html




//---- MAIN CLASS ------------------------------------------------------------//

public class Site3D extends tinyptc
{
  //---- DATA
  
  //- Output buffer

  int size;

  int[] buf;

  //- Blob data

  int[] field;

  int[][] blob;
  int[] blob_x, blob_y, blob_z;

  //- 3D data

  int[][] envmap;

  double[][] vertex;

  int[] face_type;
  int[][] face;



  //--- drawFace
  
  //  Renders a 3D face into the buffer

  void drawFace(int index)
  {  
  
  }



  //---- rand
  
  //  Lewpen's random number algorithm - Creates random real numbers within a given range

  int rand_1 = 0x87361872, rand_2 = 0x12487, rand_3 = 0x8129743;

  public double rand(double min, double max)
  {
    rand_1 += rand_2^rand_3;  //  Lewpen's algo
    rand_2 ^= rand_3*rand_1;
    rand_3 *= rand_1+rand_2;
    
    rand_1 = (rand_1 << 2) | (rand_1 >> 30);  //  Rotate seeds by different ammounts
    rand_2 = (rand_2 << 7) | (rand_2 >> 25);
    rand_3 = (rand_3 << 9) | (rand_3 >> 23);

    rand_1 += 0x15214391;  //  Randomize the bits somewhat
    rand_2 += 0xF2248365;
    rand_3 += 0x42C427AA;

    //  Create random number 0..1234566;
    
    int r = ((rand_1+rand_2+rand_3)/3) % 1234567;

    //  Scale to the range [min..max)

    return min + (max-min)*(r+0.0) / 1234567.0;
  }



  //---- calcField
  
  //  Creates the potential field for the blobs

  public void calcField(int width, int height, int frame)
  {
    //- Clear field to a sine wave pattern

    int i, j, x, y,o;

    double k;

    for(o=0, j=0; j<height; j++) for(i=0; i<width; i++, o++)
    {
      k =
        0.600 * Math.sin((i*0.129+j*0.921+frame*0.5*0.921)*3.14159*0.01523 + 1.872) +
        0.200 * Math.sin((i*0.910+j*0.283+frame*0.5*0.528)*3.14159*0.01514 + 3.421) +
        0.200 * Math.sin((i*0.726+j*0.872+frame*0.5*1.247)*3.14159*0.01721 + 2.117) +
      0;

      field[o] = 10000 + (int)(10000.0*Math.sin(k*0.5*3.14159));
    }

    //- Put blobs in field
    
    for(i=0; i<20; i++)
    {
      for(y=0; y<100; y++) for(x=0; x<100; x++)
      {
        int r = x+blob_x[i]-50;
        int s = y+blob_y[i]-50;
        if(r >= 0 && r < width && s >= 0 && s < height)
        {
          field[r+width*s] += blob[y][x];
        }
      }
    }
  }



  //---- main
  
  //  Main loop

  public void main(int width, int height)
  {
    size = width * height;
    buf = new int[size];
    field = new int[size];
    blob = new int[100][100];
    
    blob_x = new int[20];
    blob_z = new int[20];
    blob_y = new int[20];

    int x, y, i, j;

    //- Create blob potential field

    double d, dd;

    for(j=0; j<100; j++) for(i=0; i<100; i++)
    {
      d = (i-50)*(i-50) + (j-50)*(j-50);

      dd = 1-Math.sqrt(d/50/50);
      if(dd < 0) dd = 0;

      if(d < 0.01) d = 0.01;
      d = 5000000 / d;

      blob[j][i] = (int)(d * dd);
    }

    //- Position blobs
    
    for(i=0; i<20; i++)
    {
      blob_x[i] = (int)rand(0, width);
      blob_y[i] = (int)rand(0, height);
      blob_z[i] = (int)rand(0, width);
    }

    //- Anim loop

    int frame = 0;

    while (true)
    {
      long time = System.currentTimeMillis();

      calcField(width, height, frame);

      //- Render

      int o;

      for(o=0, j=0; j<height; j++) for(i=0; i<width; i++, o++)
      {
        if(field[o] > 15000) buf[o] = 0x00FFCC00; else buf[o] = 0; // -= (buf[i]>>3) & 0x1F1F1F1F;
//        buf[i] = field[i];
      }

      //- Move
      
      for(i=0; i<20; i++)
      {
        blob_y[i] = blob_y[i] - (i%5) - 1;
        if(blob_y[i] < -50)
        {
          blob_x[i] = (int)rand(0, width);
          blob_y[i] = height+50+(int)rand(0, 20);
        }
      }

      update(buf);
      frame++;
    }
  }

}



//---- end of code -----------------------------------------------------------//

Comments

Article

Sponsored Links

Toys & Games:

Doggie Doo
Nerf Vortex
Monster High
Lagoona Hydration Station
Milky Bunny
Moshling Tree House
Lego Ninja Go Fire Temple
Fireman Sam Pontypandy Rescue
Rock Elmo
Star Wars Ultimate Force Lightsaber

Games

The Dodge Game
Flatspace

2-Player Games:

Quake 2D
Meteora

Puzzle Games:

Mini Tetris
Sudoku Solver

Development

3D Graphics:

3D Graphics Articles
WebGL Examples
Flash 3D Engine
Java 3D Engine

Development:

Programming Articles
Animation Demos
Game Development Examples

Links

iBuddy Social Network
Local Legends Football
PHP Charts & Graphs
CubeLogix Studios