Loading...
Logo
Processing Forum

inexplicable crashes

in General Discussion  •  Other  •  8 months ago  
Hi folks,

I'm getting some mysterious crashes with the following sketch. It runs fine, but about one time out of ten when I close the sketch it blue-screens my computer (Macbook Pro OSX 10.6.8, Processing v2.0b7)

Help would be much appreciated. Here's the sketch:



float jit1;
 float jit2;

int time;
int mrph;
int v1, v2, v3 ,v4 ,v5 ,v6, v7, v8, v9 , v10, v11, v12, v13;

float easing = 0.05;

int chR;
int chG;
int chB;

int bR;
int bG;
int bB;

float x = 100;
float y = 100;

float vx1;
float vx2;
float vx3;
float vx4;
float vx5;
float vx6;
float vx7;
float vx8;
float vx9;
float vx10;
float vx11;
float vx12;
float vx13;


float vdx1;
float vdx2;
float vdx3;
float vdx4;
float vdx5;
float vdx6;
float vdx7;
float vdx8;
float vdx9;
float vdx10;
float vdx11;
float vdx12;
float vdx13;




int hSzX =10;
int hSzY=10;
int spd = 10;

final static int NORTH = 1;
final static int EAST = 2;
final static int SOUTH = 4;
final static int WEST = 8;
int result;

float targetX = 100;
float targetY = 100;

float targetvX;


//create a moment of chance potential
Dueller d1 = new Dueller(random(1000), random(400));

Dueller d2 = new Dueller(random(1000), random(400));

void setup(){
  time = 0;
  size(1000, 400, P2D);
    result = 0;
   
    
   
   
     v1 = int((random(70)+5));
     v2 = int((random(70)+5));
     v3 = int((random(70)+5));
     v4 = int((random(70)+5));
     v5 = int((random(70)+5));
     v6 = int((random(70)+5));
     v7 = int((random(70)+5));
     v8 = int((random(70)+5));
     v9 = int((random(70)+5));
     v10 = int((random(70)+5));
     v11 = int((random(70)+5));
     v12 = int((random(70)+5));
     v13 = int((random(70)+5));
   
   
   
    mrph = int(random(2));
    //frameRate(60);
    bR = int(random(100));
    bG = int(random(100));
    bB = int(random(100));
   
    chR = bR+(int(random(100)))+175;
    chG = bG+(int(random(100)))+175;
    chB = bB+(int(random(100)))+175;
}

void draw(){
 
 
 
 background(bR, bG, bB);
 
    switch(result) {
    case NORTH: targetY-=spd; break;
    case EAST: targetX+=spd; break;
    case SOUTH: targetY+=spd; break;
    case WEST: targetX-=spd; break;
    case NORTH|EAST: targetY-=spd; targetX+=spd; break;
    case NORTH|WEST: targetY-=spd; targetX-=spd; break;
    case SOUTH|EAST: targetY+=spd; targetX+=spd; break;
    case SOUTH|WEST: targetY+=spd; targetX-=spd; break;
  }
 
  float dx = targetX - x;
  if(abs(dx) > 1) {
    x += dx * easing;
  }
 
  float dy = targetY - y;
  if(abs(dy) > 1) {
    y += dy * easing;
  }
 
  noStroke();
  fill(chR, chG, chB, 90);
 // rect(x, y, hSzX, hSzY);
 

 
 
  if(mrph == 1){
      if( millis() > time ){
    time = millis() + int(random(2000)); //random delay
   
   
    v1 = int(random(60)+5);
     v2 = int(random(60)+5);
     v3 = int(random(60)+5);
     v4 = int(random(60)+5);
     v5 = int(random(60)+5);
     v6 = int(random(60)+5);
     v7 = int(random(60)+5);
     v8 = int(random(60)+5);
     v9 = int(random(60)+5);
     v10 = int(random(60)+5);
     v11 = int(random(60)+5);
     v12 = int(random(60)+5);
     v13 = int(random(60)+5);
      }
   
 

      float vdx1 = v1 - vx1;
  if(abs(vdx1) > 0.1) {
    vx1 += vdx1 * easing;
  }
     float vdx2 = v2 - vx2;
  if(abs(vdx2) > 0.1) {
    vx2 += vdx2 * easing;
  }
 
        float vdx3 = v3 - vx3;
  if(abs(vdx3) > 0.1) {
    vx3 += vdx3 * easing;
  }
     float vdx4 = v4 - vx4;
  if(abs(vdx4) > 0.1) {
    vx4 += vdx4 * easing;
  }
     float vdx5 = v5 - vx5;
  if(abs(vdx5) > 0.1) {
    vx5 += vdx5 * easing;
  }
       float vdx6 = v6 - vx6;
  if(abs(vdx6) > 0.1) {
    vx6 += vdx6 * easing;
  }
         float vdx7 = v7 - vx7;
  if(abs(vdx7) > 0.1) {
    vx7 += vdx7 * easing;
  }
           float vdx8 = v8 - vx8;
  if(abs(vdx8) > 0.1) {
    vx8 += vdx8 * easing;
  }
             float vdx9 = v9 - vx9;
  if(abs(vdx9) > 0.1) {
    vx9 += vdx9 * easing;
  }
             float vdx10 = v10 - vx10;
  if(abs(vdx10) > 0.1) {
    vx10 += vdx10 * easing;
  }
             float vdx11 = v11 - vx11;
  if(abs(vdx11) > 0.1) {
    vx11 += vdx11 * easing;
  }
               float vdx12 = v12 - vx12;
  if(abs(vdx12) > 0.1) {
    vx12 += vdx12 * easing;
  }
               float vdx13 = v13 - vx13;
  if(abs(vdx13) > 0.1) {
    vx13 += vdx13 * easing;
  }
 
 
    beginShape();
vertex(x+vx1, y+vx2);
vertex(x+vx3, y+vx4);
vertex(x+vx6, y+vx7);
vertex(x+vx8, y+vx9);
vertex(x+vx10, y+vx11);
vertex(x+vx12, y+vx13);
endShape(CLOSE);

     
  }
 
    if(mrph == 0){
    beginShape();
vertex(x+v1, y+v2);
vertex(x+v3, y+v4);
vertex(x+v6, y+v7);
vertex(x+v8, y+v9);
vertex(x+v10, y+v11);
vertex(x+v12, y+v13);
endShape(CLOSE);
  }
 
 

  //keyPressed();
 
  jit1 = random(1000)-random(1000);
  jit2 = random(1000)-random(1000);
 
 d1.update(x, y, random(0.02), jit1);
 d2.update(x, y, random(0.02), jit2);
 
}


void keyPressed(){
 
  if(key ==CODED){
  switch(keyCode) {
    case (UP):result |=NORTH;break;
    case (RIGHT):result |=EAST;break;
    case (DOWN):result |=SOUTH;break;
    case (LEFT):result |=WEST;break;
    }
  }
}
 
void keyReleased(){
if(key ==CODED){ 
  switch(keyCode) {
    case(UP):result ^=NORTH;break;
    case(RIGHT):result ^=EAST;break;
    case(DOWN):result ^=SOUTH;break;
    case(LEFT):result ^=WEST;break;
  }
}
}



class Dueller{
  //float cx, cy;
  //float easingD = 0.01;
  //float targetcX, targetcY;
  float cx, cy;
  Dueller(float initX, float initY){
  cx = initX;
  cy = initY;
  }
 
  void update(float targetcX, float targetcY, float easingD, float jit){
  float dcx = targetcX - cx;
  if(abs(dcx) > 1) {
    cx += (dcx+jit) * easingD;
  }
 
  float dcy = targetcY - cy;
  if(abs(dcy) > 1) {
    cy += (dcy+jit) * easingD;
  }
 
 
  noStroke();
  fill(255, 255, 255, 90);
  rectMode(CENTER);
 rect(cx, cy, random(30), random(30));
 

  }
 
 
}

Replies(4)

Hello! Tested your code many times and didn't see any crash!

While I was at it, did lotsa cleanup and tweaks.

Check it out! Who knows it might work better for ya?
Copy code
    /**
     * Flying Papers (v2.65)
     * by Althumm (2013/Feb)
     * http://forum.processing.org/topic/inexplicable-crashes
     */
    
    final static float easing  = .1;
    final static byte  maxSize = 0100, spd = 10;
    
    final static byte NORTH = 1, EAST = 2;
    final static byte SOUTH = 4, WEST = 8;
    byte result;
    
    final static byte numVertices = 12;
    final static byte[]  v = new byte[numVertices];
    final static byte[] vv = new byte[numVertices];
    
    color bRGB, cRGB;
    final static color dRGB = 0x40FFFFFF;
    
    int x, y;
    int tx, ty;
    int frameDelay = 1;
    
    Dueler d1, d2;
    
    void setup() {
    
      size(1200, 750);
      frameRate(50);
      rectMode(CENTER);
      noStroke();
    
      d1 = new Dueler();
      d2 = new Dueler();
    
      tx = width>>1;
      ty = height>>1;
    
      byte bR = (byte) random(0100);
      byte bG = (byte) random(0100);
      byte bB = (byte) random(0100);
      bRGB = 0xFF<<030 | bR<<020 | bG<<010 | bB;
    
      int cR = bR + (int) random(0300);
      int cG = bG + (int) random(0300);
      int cB = bB + (int) random(0300);
      cRGB = 0200<<030 | cR<<020 | cG<<010 | cB;
    
      println( hex(bRGB) + "   ***   " + hex(cRGB));
    }
    
    void draw() {
    
      background(bRGB);
      fill(cRGB);
    
      if      ( (result & NORTH) == NORTH )  ty -= spd;
      else if ( (result & SOUTH) == SOUTH )  ty += spd;
    
      if      ( (result & WEST)  == WEST )   tx -= spd;
      else if ( (result & EAST)  == EAST )   tx += spd;
    
      int d = tx - x;
      if (abs(d) > 1)           x += d * easing;
      if (abs(d = ty - y) > 1)  y += d * easing;
    
      if ( frameCount == frameDelay ) {
        frameDelay = frameCount + (int) random(0200);
    
        for ( byte i=0; i!=numVertices; 
        v[i++] = (byte) random(010, maxSize) );
      }
    
      int vvv;
      for ( byte i=0; i!=numVertices; i++) 
        if (abs( vvv = v[i] - vv[i] ) > 1)
          vv[i] += vvv * easing;
    
      beginShape();
    
      for ( byte i=0; i!=numVertices; i+=2)
        vertex( x + vv[i], y + vv[i+1] );
    
      endShape(CLOSE);
    
      fill(dRGB);
      d1.action(x, y, random(.02), random(width) - random(width) );
      d2.action(x, y, random(.02), random(width) - random(width) );
    }
    
    
    void keyPressed() {
    
      switch(keyCode) {
      case UP:
      case'W':
        result |= NORTH;
        break;
    
      case RIGHT:
      case'D':
        result |= EAST;
        break;
    
      case DOWN:
      case'S':
        result |= SOUTH;
        break;
    
      case LEFT:
      case'A':
        result |= WEST;
      }
    }
    
    void keyReleased() {
    
      switch(keyCode) {
      case UP:
      case'W':
        result ^= NORTH;
        break;
    
      case RIGHT:
      case'D':
        result ^= EAST;
        break;
    
      case DOWN:
      case'S':
        result ^= SOUTH;
        break;
    
      case LEFT:
      case'A':
        result ^= WEST;
      }
    }
    
    class Dueler {
      short cx, cy;
    
      static final byte maxSize  = 30;
      //static final float ease = .02;
    
      Dueler() {
        cx = (short) random(width);
        cy = (short) random(height);
      }
    
      void action(final int tcX, final int tcY, 
      final float ease, final float jit)
      {
        int dc = tcX - cx;
        if (abs(dc) > 1)             cx += (dc+jit) * ease;
        if (abs(dc = tcY - cy) > 1)  cy += (dc+jit) * ease;
    
        rect( cx, cy, random(maxSize), random(maxSize) );
      }
    }
    

thanks so much goToLoop - that's awesome!
There is nothing in your code that could cause the computer to crash. It is unlikely to be Processing otherwise others would have reported the problem, it could be somethiing to do with your Java installation.
cool, great to know. thanks for trying it out