rutera

Hypnosis animation

Oct 19th, 2013
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.49 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.GradientPaint;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.Paint;
  7. import java.awt.RenderingHints;
  8. import java.awt.Shape;
  9. import java.awt.geom.GeneralPath;
  10.  
  11. import javax.swing.JComponent;
  12. import javax.swing.JFrame;
  13.  
  14. public class Hypnosis1 extends JComponent implements Runnable {
  15.   private int[] coordinates;
  16.  
  17.   private int[] deltas;
  18.  
  19.   private Paint paint;
  20.  
  21.   public Hypnosis1(int numberOfSegments) {
  22.     int numberOfCoordinates = numberOfSegments * 4 + 2;
  23.     coordinates = new int[numberOfCoordinates];
  24.     deltas = new int[numberOfCoordinates];
  25.     for (int i = 0; i < numberOfCoordinates; i++) {
  26.       coordinates[i] = (int) (Math.random() * 300);
  27.       deltas[i] = (int) (Math.random() * 4 + 3);
  28.       if (deltas[i] > 4)
  29.         deltas[i] = -(deltas[i] - 3);
  30.     }
  31.     paint = new GradientPaint(0, 0, Color.blue, 20, 10, Color.red, true);
  32.  
  33.     Thread t = new Thread(this);
  34.     t.start();
  35.   }
  36.  
  37.   public void run() {
  38.     try {
  39.       while (true) {
  40.         timeStep();
  41.         repaint();
  42.         Thread.sleep(1000 / 24);
  43.       }
  44.     } catch (InterruptedException ie) {
  45.     }
  46.   }
  47.  
  48.   public void paint(Graphics g) {
  49.     Graphics2D g2 = (Graphics2D) g;
  50.     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  51.     Shape s = createShape();
  52.     g2.setPaint(paint);
  53.     g2.fill(s);
  54.     g2.setPaint(Color.white);
  55.     g2.draw(s);
  56.   }
  57.  
  58.   private void timeStep() {
  59.     Dimension d = getSize();
  60.     if (d.width == 0 || d.height == 0)
  61.       return;
  62.     for (int i = 0; i < coordinates.length; i++) {
  63.       coordinates[i] += deltas[i];
  64.       int limit = (i % 2 == 0) ? d.width : d.height;
  65.       if (coordinates[i] < 0) {
  66.         coordinates[i] = 0;
  67.         deltas[i] = -deltas[i];
  68.       } else if (coordinates[i] > limit) {
  69.         coordinates[i] = limit - 1;
  70.         deltas[i] = -deltas[i];
  71.       }
  72.     }
  73.   }
  74.  
  75.   private Shape createShape() {
  76.     GeneralPath path = new GeneralPath();
  77.     path.moveTo(coordinates[0], coordinates[1]);
  78.     for (int i = 2; i < coordinates.length; i += 4)
  79.       path.quadTo(coordinates[i], coordinates[i + 1], coordinates[i + 2], coordinates[i + 3]);
  80.     path.closePath();
  81.     return path;
  82.   }
  83.  
  84.   public static void main(String[] args) {
  85.     JFrame f = new JFrame("Hypnosis");
  86.     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  87.     f.add(new Hypnosis1(4));
  88.     f.setSize(300, 300);
  89.     f.setVisible(true);
  90.   }
  91. }
Add Comment
Please, Sign In to add comment