topical media & game development

talk show tell print

#javascript-processing-example-custom-snake.htm / htm



  <!DOCTYPE html>
  <html><head>
  <script src="javascript-processing-example-processing.js"></script>
  <script src="javascript-processing-example-init.js"></script>
  <link rel="stylesheet" href="javascript-processing-example-style.css">
  </head>
  <body><h1><a href="http://ejohn.org/blog/processingjs/">Processing.js</a></h1>
  <h2>Snake</h2>
  
  <p>A snake that follows your cursor.</p>
  
  <p><a href="http://ejohn.org/">Snake</a><br>
  <script type="application/processing">
  float[] x = new float[20];
  float[] y = new float[20];
  float segLength = 10;
  PImage a;
  
  void setup() {
    size(320, 240);
    smooth();
    a = loadImage("dirt.jpg");
  }
  
  void draw() {
    background(226);
    image( a, 0, 0 );
    dragSegment(0, mouseX - 8, mouseY - 8);
    for(int i=0; i < x.length-1; i++) {
      dragSegment(i+1, x[i], y[i]);
    }
  }
  
  void dragSegment(int i, float xin, float yin) {
    float dx = xin - x[i];
    float dy = yin - y[i];
    float angle = atan2(dy, dx);  
    x[i] = xin - cos(angle) * segLength;
    y[i] = yin - sin(angle) * segLength;
    //stroke(23, 79, 4, 220);
    
    pushMatrix();
    translate(x[i], y[i]);
    rotate(angle);
    
    color c;
    
    if ( i % 3 == 1 )
      c = color(0, 0, 0, 255);
    else if ( i % 3 == 2 )
      c = color(255, 255, 0, 255);
    else
      c = color(255, 0, 0, 255);
  
    stroke( c );
    strokeWeight(10);
    line(0, 0, segLength, 0);
    
    if ( i == x.length - 1 )
    {
      fill( c );
      noStroke();
      beginShape(TRIANGLES);
      vertex(0, 5);
      vertex(-2 * segLength, 0);
      vertex(0, -5);
      endShape();
    }
    
    if ( i == 0 )
    {
     // stroke(0, 255);
     noStroke();
     fill(0, 255);
     ellipse(segLength, -2, 3, 3);
     ellipse(segLength, 2, 3, 3);
      //point(segLength, -2);
      //point(segLength, 2);
    }
    
    popMatrix();
  }
  </script><canvas width="320" height="240"></canvas></p>
  <div style="overflow: hidden; height: 0px; width: 0px;"><img src="dirt.jpg" id="dirt.jpg"></div>
  
  <pre>float[] x = new float[20];
  float[] y = new float[20];
  float segLength = 10;
  
  void setup() {
    size(320, 240);
    smooth();
  }
  
  void draw() {
    background(226);
    image( loadImage("dirt.jpg"), 0, 0 );
    dragSegment(0, mouseX - 8, mouseY - 8);
    for(int i=0; i &lt; x.length-1; i++) {
      dragSegment(i+1, x[i], y[i]);
    }
  }
  
  void dragSegment(int i, float xin, float yin) {
    float dx = xin - x[i];
    float dy = yin - y[i];
    float angle = atan2(dy, dx);  
    x[i] = xin - cos(angle) * segLength;
    y[i] = yin - sin(angle) * segLength;
    //stroke(23, 79, 4, 220);
    
    pushMatrix();
    translate(x[i], y[i]);
    rotate(angle);
    
    color c;
    
    if ( i % 3 == 1 )
      c = color(0, 0, 0, 255);
    else if ( i % 3 == 2 )
      c = color(255, 255, 0, 255);
    else
      c = color(255, 0, 0, 255);
  
    stroke( c );
    strokeWeight(10);
    line(0, 0, segLength, 0);
    
    if ( i == x.length - 1 )
    {
      fill( c );
      noStroke();
      beginShape(TRIANGLES);
      vertex(0, 5);
      vertex(-2 * segLength, 0);
      vertex(0, -5);
      endShape();
    }
    
    if ( i == 0 )
    {
     // stroke(0, 255);
     noStroke();
     fill(0, 255);
     ellipse(segLength, -2, 3, 3);
     ellipse(segLength, 2, 3, 3);
      //point(segLength, -2);
      //point(segLength, 2);
    }
    
    popMatrix();
  }</pre>
  </body></html>
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.