How to make platforms move with an array list??

edited December 2017 in Questions about Code

Hey there! I was trying to make different platforms to move in x at the screen. I cannot find out how to do it with an array list... Platforms must be different each other about sizes.

Thanks in advance :)

Tagged:

Answers

  • I don't see an ArrayList at all in your code. Have you even tried to create one based on the examples?

  • Even then, you would only use an ArrayList if you want to have platforms that start and stop existing a lot. I think what you should really do first is to not worry about ArrayLists at all, and instead just write a MovingPlatform class.

  • edited December 2017

    Hey there, good morning! Here's my code! Now platform (terra) is moving from one point, what should I do if I want that different platforms appear and move in x? (maybe using an array list?)

    I know how ArrayList works, but I don't know how to apply at my code...

    @TfGuy44 I've written a void terra (platform) to be moved in the x... any help?

    Thanks! :)

    boolean salta = false;
    boolean baixa = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    
    float cercleX = 50;
    float cercleY = 50;
    float gravetat = 0.5;
    int posx_personatge = 0;
    int posy_personatge = 50;
    int posx_terra;
    int posy_terra;
    float vy;
    float vx;
    float bounce = -0.5;
    float scroll;
    int estat;
    int terra;
    color c;
    //terra [] = new terra [2];
    
    
    
    //color c = get(0,0);
    
    //////////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    }
    
    
    
    void draw() {
      background (255);
     // image(img, 0, 0);
    
    
    terra ();
    //personatge ();
    
    //posx_personatge++;
    
      frameRate (70);
    
        fill(0);
      //rect(0, 400, 500, height); 
    
      //rect(800, 300, 500, height);
    
    
      fill(255, 0, 255);
      ellipse(100, posy_personatge, 20, 20);
    
      if (!stop) {
        vy += gravetat;
        posy_personatge += vy;
      }
    
    c = get(posx_personatge,posy_personatge + 15);
      if (c==color(0)) {
    
    
        vy = bounce * abs(vy);
    
        if (abs(vy)<0.281) {
          vy=0.0;
    
          stop=true;
        }
      }
      else {
        posy_personatge ++;
       // posx_personatge ++;
        gravetat = 1;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy=-15;
      }
    
      if (baixa) {
        posy_personatge++;
      }
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
      }
    }
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
      } else if (keyCode == DOWN) {
        baixa = true;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
      } else if (keyCode == DOWN) {
        baixa = false;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    
    
      void terra() {   fill(0);
      rect(posx_terra, 200, 500, height); 
     posx_terra --;
    }
    
    
    //
    
  • @jeremydouglass I've tried and I don't know how to use it. I understand how it works but I don't know how to apply in my code... Thanks

  • If you have class Platform you can have an ArrayList of that class

    See tutorial objects

    ArrayList platforms = new ArrayList ();

    see class would know position and size

    Class = cookie maker

    Object = cookies

  • edited December 2017

    Okay! Now I've created the Array! But why it only appear one single platform? If I declared that n = 50 (number of platforms)... Can anyone help me please?

    Thanks in advance guys! I'm reaching what I was searching for! :) [-O<

    boolean salta = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    int n=50;
    float cercleX = 50;
    float cercleY = 50;
    float gravetat = 0.5;
    int posx_personatge = 0;
    int posy_personatge = 50;
    float[] posx_terra = new float[n];
    float []posy_terra = new float[n];
    float vy_personatge;
    float vx_personatge;
    float vx_terra;
    float vy_terra;
    float bounce = -0.5;
    float scroll;
    int estat;
    int terra;
    color c;
    
    //////////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    }
    
    
    
    void draw() {
      background (255);
      // image(img, 0, 0);
    
    
      terra ();
    
      //posx_personatge++;
    
      frameRate (70);
    
      fill(0);
    
    
    
      fill(255, 0, 255);
      ellipse(100, posy_personatge, 20, 20);
    
      if (!stop) {
        vy_personatge += gravetat;
        posy_personatge += vy_personatge;
      }
    
      c = get(posx_personatge, posy_personatge + 15);
      //c = get(posx_personatge +15, posy_personatge);
      if (c==color(0)) {
    gravetat = 1;
        vy_personatge = bounce * abs(vy_personatge);
    
        if (abs(vy_personatge)<0.01) {
          vy_personatge=0.0;
    
          stop=false;
        }
      } else {
        posy_personatge ++;
        posx_personatge ++;
        gravetat = 2;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy_personatge=-15;
      }
    
    
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
      }
    }
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
    
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
    
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    void terra() {   
      fill(0);
      for (int i=0; i<n; i++) {
        posx_terra [i] += vx_terra;
        posy_terra [i] += vy_terra;
    
    
        if ((posx_terra [i] < 25 || posx_terra [i] > width)) {
          vx_terra = vy_terra ;
          posx_terra [i] -- ;
        }
    
        rect(posx_terra[i], 400, random(20,100), height); 
        //posx_terra = width -500;
        posx_terra [i] --;
    
    
    
      }
    }
    
    //
    
  • They are presumably all on top of each other

    Make vx_terra an array too, type float

    Fill it with different random values between 1 and 4 in setup

  • edited December 2017

    I don't understand you, I've changed the code but when I play it don't change anything... :( vx_terra it's a float already

  • PLEASE PLEASE HELP! I want to understand it @Chrisir / @TfGuy44

  • edited December 2017

    as said make vx_terra a float array, not a float variable

    posx_terra is an array

    Make the same for vx_terra

    Post your entire code after the changes - how can we see what is wrong when you don’t show your current code ...?

  • Answer ✓

    Here, I wrote you a Platform class.

    class Platform {
      float sx, sy, ex, ey;
      float w,h;
      float l, dl;
      Platform(){
        w=40;
        h=10;
        dl=0.01;
      }
      void draw(){
        move();
        show();
      }
      void move(){
        l+=dl;
        if(l>1||l<0) dl*=-1;
      }
      void show(){
        noStroke();
        fill(0,200,0);
        rect(lerp(sx,ex,l),lerp(sy,ey,l),w,h);
      }
    }
    
    Platform p0;
    
    void setup(){
      size(600,400);
      p0 = new Platform();
      p0.sx = 20;
      p0.ex = 220;
      p0.sy = 20;
      p0.ey = 20;
    }
    
    void draw(){
      background(0);
      p0.draw();
    }
    

    See how there is just one Platform object, called p0? Well now your goal is to have an ArrayList of Platforms.

  • edited December 2017

    It doesn't matter if you have code in many tabs. Post it all here in one chunk of code.

    I've since gone platform-crazy!

    class Platform {
      float sx, sy, ex, ey;
      float w,h;
      float l, dl;
      color c;
      Platform(){
        w=40;
        h=10;
        l = random(1);
        dl = (random(1)<.5?-1:1)*random(0.01);
        c = color(random(255),random(255),random(255));
        sx = random(width);
        ex = random(width);
        sy = random(height);
        ey = random(height);
      }
      void draw(){
        move();
        show();
      }
      void move(){
        l+=dl;
        if(l>1||l<0) dl*=-1;
      }
      void show(){
        noStroke();
        fill(c);
        rect(lerp(sx,ex,l),lerp(sy,ey,l),w,h);
      }
    }
    
    ArrayList<Platform> platforms = new ArrayList();
    
    void setup(){
      size(600,400);
      for( int i = 0; i < 100; i++){
        platforms.add( new Platform() );
      }
    }
    
    void draw(){
      background(0);
      for( Platform p : platforms ) p.draw();
    }
    
  • edited December 2017

    So this is what i'm working at, don't know why the ball do not appear when I play.. (ball is the void personatge line 178 )

    //1st TAB
    //FOTOS
    PImage fondo;
    PImage menu;
    PImage instruccions;
    PImage nivells;
    //PImage restart;
    
    boolean salta = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    
    
    //TERRA
    int puntua;
    float velocitat;
    
    
    //PILOTA
    int posy_terra;
    float gravetat = 0.5;
    int mida_personatge;
    float vy_personatge;
    int posx_personatge;
    int posy_personatge;
    
     Obstacles plataformes [] = new Obstacles [100];
     Obstacles premis [] = new Obstacles [100];
     float scroll;
     int estat;
    
    //PUNTUACIÓ
    PrintWriter guardar_puntuacion;
    int puntuacion;
    int max_puntuacion = 0;
    BufferedReader lector_puntuacion_maxima;
    String line = "0";
    
    
    //float vx_personatge;
    //float vy_terra;
    float bounce = -0.5;
    
    //int terra;
    color c;
    
    
    void setup() {
      size (1280, 720);
      tornar_a_jugar();
     imageMode (CENTER);
        translate (200,0);
    
      fondo = loadImage("FONDO.png");
      instruccions = loadImage ("INSTRUCCIONS.png");
      nivells = loadImage ("NIVELLS.png");
      //restart = loadImage ("restart.png");
      menu = loadImage ("MENU.png");
    
    
    }
    
    
    void draw() {
     frameRate (70);
      //background (39);
    
    
      if (estat == 0) {
        inici();
      }
      if (estat == 1) {
        instruccions();
      }
      if (estat == 2) {
        nivells();
      } 
     if (estat == 3) {    
       game();
      }
      if (estat == 4) {
        game_over();
      }
    }
    
    
    //////////////////////////////////////////////////////////////////
    //2nd TAB
    void game() {
      background (78);
      imageMode (CENTER);
    
      image (fondo,640,360);
    
    
    
      if (posy_personatge > height) {
        estat = 4;
      }
      scroll+= velocitat;
      textSize (20);
      fill (0);
      text("AWARDS: "+puntua, 10, 40); 
      puntuacion = round(scroll/170);
      text("PLATFORMS JUMPED: " +puntuacion, 10, 70);      //contador de puntuación a partir de las plataformas que va saltando.
      fill(255);
      fill (122, 188, 94, 200);
    
    
      for (int i=0; i<100; i++) {
        noStroke();
        plataformes [i].moviment();
        plataformes[i].limit_terra();
        if (premis[i].premi_tocat == false) {
          premis[i].moviment_premis();
          premis[i].premi_tocat();
        }
      }
    }
    
    
    
    class Obstacles {
      float posx_terra;
      float posy_terra;
      int num;
      float midax_terra;
      float miday_terra;
      float mida_premi;
      float vx_terra;
      float posx_premi;
      float posy_premi;
      int color_premi = 200;
      boolean premi_tocat = false;
      Obstacles (int espai_terra, int y_terra) {
        num = espai_terra;
        posy_terra = y_terra;
        vx_terra = -10;
        midax_terra = 120;
        miday_terra = height;
        mida_premi = 20;
      }
    
      void moviment () {
        posx_terra = num*180-scroll;
        rect (posx_terra, posy_terra, midax_terra, miday_terra);
      }
    
    
      void moviment_premis() {
        posx_premi = 180+num*180-scroll;
        posy_premi = posy_terra -10;
        fill (255, color_premi, 0);
        rect (posx_premi, posy_premi, mida_premi, mida_premi);
      }
    
      void premi_tocat() {
        if ((posx_personatge + mida_personatge/2 > posy_terra) && (posx_terra < 200+14) && (posy_personatge > posy_terra == false)) {
          vy_personatge = -0.01;
        } else {
          vy_personatge += 0.00003;
          posy_personatge += vy_personatge;
        }
        if (posy_terra + miday_terra > 350) {
          posy_terra -= 40;
        }
        if (posy_terra < 50) {
          posy_terra += 40;
        }
      }
    
    
      void limit_terra () {
      }
    
    
      void personatge () {
        fill(255, 0, 255);
        ellipse(100, posy_personatge, 20, 20);
    
        if (!stop) {
          vy_personatge += gravetat;
          posy_personatge += vy_personatge;
        }
    
        c = get(posx_personatge, posy_personatge + 15);
        //c = get(posx_personatge +15, posy_personatge);
        if (c==color(0)) {
          gravetat = 1;
          vy_personatge = bounce * abs(vy_personatge);
    
          if (abs(vy_personatge)<0.01) {
            vy_personatge=0.0;
    
            stop=false;
          }
        } else {
          posy_personatge ++;
          posx_personatge ++;
          gravetat = 2;
        }
    
        // booleans 
        if (salta) {
          posy_personatge--;
          stop=false; 
          vy_personatge=-15;
        }
    
    
    
        if (esquerra) {
          posx_personatge--;
        }
    
        if (dreta) {
          posx_personatge++;
        }
      }
    
      void keyPressed() {
        if (keyCode == UP) {
          salta = true;
        } else if (keyCode == LEFT) {
          esquerra = false;
        } else if (keyCode == RIGHT) {
          dreta = true;
        }
      }
    
      void keyReleased() {
        if (keyCode == UP) {
          salta = false;
        } else if (keyCode == LEFT) {
          esquerra = false;
        } else if (keyCode == RIGHT) {
          dreta = false;
        }
      }
    }
    
    //////////////////////////////////////////////////////////////////
    //3rd TAB
    void game_over(){
      background (251, 244, 231);
      //image (restart, 512, 289);
      textSize(30);
      fill(239, 124, 142);
      text("POINTS: " +puntuacion, 240, 325);
    
       if (puntuacion > max_puntuacion) {
        max_puntuacion = puntuacion;
        guardar_puntuacion.println(" HIGHSCORE: "+max_puntuacion); 
        guardar_puntuacion.flush();
        guardar_puntuacion.close();
      } else {
        guardar_puntuacion.println("HIGHSCORE: "+max_puntuacion);
        guardar_puntuacion.flush();
        guardar_puntuacion.close();
      }
        textSize(30);
      text("HIGHSCORE: " +max_puntuacion, 545, 325);
    }
    
    
    void tornar_a_jugar(){
     guardar_puntuacion = createWriter("maxim.txt"); 
      lector_puntuacion_maxima = createReader("maxim.txt");
      posy_terra = 400;
      puntua = 0;
      puntuacion = 0;
      posx_personatge = 200;
      posy_personatge = 300;
      mida_personatge = 30;
      vy_personatge = 0;
      scroll = -10;
      estat = 0;
    
    
        for (int i = 0; i < 100; i++) {
        posy_terra += random (-50,50);
        fill (0);
      plataformes [i] = new Obstacles (i, posy_terra);
      premis [i] = new Obstacles (5+i*5,posy_terra);
        }
    
    }
    
    
    //////////////////////////////////////////////////////////////////
    //4th TAB
    void inici() {
      background (251, 0, 100);
        imageMode (CENTER);
    
      image (menu,640,360);
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 566 && mouseX <= 717 && mouseY >=466  && mouseY <= 518) {
          estat = 2;
        }
      }
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 487 && mouseX <= 796 && mouseY >=389  && mouseY <= 438) {
          estat = 1;
        }
      }
    }
    //////////////////////////////////////////////////////////////////
    //5th TAB
    void instruccions() {
      background (14,12,14);
      image (instruccions,640,360);
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 469 && mouseX <= 554 && mouseY >=498 && mouseY <= 540) {
          estat=0;
        }
      }
    }
    
    //////////////////////////////////////////////////////////////////
    //6th TAB
    void nivells() {
      background (251, 244, 231);
    
      image (nivells,640,360);
    
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 198 && mouseX <= 333 && mouseY >=447  && mouseY <= 495) {
          velocitat = 2;
          estat = 3;
        }
      }
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 540 && mouseX <= 740 && mouseY >=447  && mouseY <= 495) {
          velocitat = 3.5;
          estat = 3;
        }
      }
    
      if (mousePressed  && (mouseButton==LEFT)) {
        if (mouseX >= 940 && mouseX <= 1089 && mouseY >=447  && mouseY <= 495) {
          velocitat = 5;
          estat = 3;
        }
      }
    
       if (mousePressed  && (mouseButton==RIGHT)) {
        if (mouseX >= 540 && mouseX <= 740 && mouseY >=623  && mouseY <= 667) {
    
          estat = 0;
        }
      }
    }
    

    PICTURES: "FONDO.png" FONDO "INSTRUCCIONS.png" INSTRUCCIONS "MENU.png" MENU "NIVELLS .png" NIVELLS

  • I've changed the code a bit so the ball jumps, but it seems it goes veeeeery fast!

  • can you make it go slower?

    add less

  • @chrisir i’ve tried but I don’t know how and why it goes so fast... if anyone knows how to please tell me

  • Do you mean the speed of posx_personatge ?

    That’s

    posx_personatge ++;

    try

    posx_personatge += 0.2;

    Make sure posx_personatge is a float

  • edited December 2017

    But what posx_personatge ++; is making is increassing / moving the ball in x, I want the velocity in y to be slower

  • Yeah both lines are next to each other

    For x and for y

  • So what should I change in the code? :-S

  • edited December 2017

    Okay @Chrisir & @TfGuy44! Trying to understand I simplified the code. This code makes the ball bounce correctly in a good velocity in y. But the array --> Obstacles plataformes [] = new Obstacles [100];

    isn't working... why? :-/

    boolean salta = false;
    boolean baixa = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    
    int radi = 20;
    float gravetat = 0.98;
    int posx_personatge = 0;
    int posy_personatge = 50;
    float vy_personatge;
    float vx;
    float bounce = -0.5;
    
    
    
    float scroll; 
    int estat;
    int terra;
    color c, d;
    int velocitat;
    
    
    
    ////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      frameRate (70);
    
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    }
    
    
    
    void draw() {
      background (255);
      //image(img, 0, 0);
    
      Obstacles plataformes [] = new Obstacles [100];
    
      noStroke ();
    
    
    
      posx_personatge++;
    
      frameRate (70);
    
      fill(0);
      rect(0, 400, 100, height); 
      rect(100, 500, 100, height); 
      rect(200, 600, 100, height); 
      rect(300, 500, 200, height); 
    
    
    
      fill(255, 0, 0);
      ellipse(posx_personatge, posy_personatge, radi, radi);
    
      if (!stop) {
        vy_personatge += gravetat;
        posy_personatge += vy_personatge;
      }
    
      c = get(posx_personatge, posy_personatge + 10);
      if (c==color(0)) {
        gravetat = 0.1;
        vy_personatge = bounce * abs(vy_personatge);
    
        d = get(posx_personatge +10, posy_personatge);
        if (d == color (0)) {
          posx_personatge = posx_personatge - velocitat;
        }
    
        if (abs(vy_personatge)<0.01) {
          vy_personatge=+1;
    
          stop=true;
        }
      } else {
        posy_personatge ++;
        //posx_personatge ++;
        gravetat = 0.5;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy_personatge=-10;
      }
    
      if (baixa) {
        posy_personatge++;
      }
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
      }
    }
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
      } else if (keyCode == DOWN) {
        baixa = true;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
      } else if (keyCode == DOWN) {
        baixa = false;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    
    class Obstacles {
      float posx_terra;
      float posy_terra;
      int num;
      float midax_terra ;
      float miday_terra;
      float vx_terra;
    
      Obstacles (int espai_terra, int y_terra) {
        num = espai_terra;
        posy_terra = y_terra;
        vx_terra = -10;
        midax_terra = random (100, 400);
        miday_terra = random (50, height);
      }
    
      void moviment () {
        posx_terra = num*180-scroll;
        fill (0);
        rect (posx_terra, posy_terra, midax_terra, miday_terra);
      }
    }
    

    thanks for all your time! :)

  • This

    Obstacles plataformes [] = new Obstacles [100];

    belongs in setup not draw

    It’s

    Obstacles[[ plataformes = new Obstacles [100];

    By the way.

    I also suggest to Make this global

    Before setup

    Obstacles[] plataformes ;

    in setup

    plataformes = new Obstacles [100];

  • Tried and didn't work either.. :(

  • What happens now and what do you want to happen ?

    Post your entire code

  • //
    
    boolean salta = false;
    boolean baixa = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    
    int radi = 20;
    float gravetat = 0.98;
    int posx_personatge = 0;
    int posy_personatge = 50;
    float vy_personatge;
    float vx;
    float bounce = -0.5;
    
    
    
    float scroll; 
    int estat;
    int terra;
    color c, d;
    int velocitat;
    
    Obstacles[] plataformes; 
    
    ////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      frameRate (70);
    
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    
      plataformes = new Obstacles [100];
    
      for ( int i = 0; i < 100; i++) {
        plataformes[i] = new Obstacles(i, 3);
      }
    }
    
    
    
    void draw() {
      background (255);
      //image(img, 0, 0);
      noStroke ();
      posx_personatge++;
    
      frameRate (70);
    
      fill(0);
      rect(0, 400, 100, height); 
      rect(100, 500, 100, height); 
      rect(200, 600, 100, height); 
      rect(300, 500, 200, height); 
    
    
    
      fill(255, 0, 0);
      ellipse(posx_personatge, posy_personatge, radi, radi);
    
      if (!stop) {
        vy_personatge += gravetat;
        posy_personatge += vy_personatge;
      }
    
      c = get(posx_personatge, posy_personatge + 10);
      if (c==color(0)) {
        gravetat = 0.1;
        vy_personatge = bounce * abs(vy_personatge);
    
        d = get(posx_personatge +10, posy_personatge);
        if (d == color (0)) {
          posx_personatge = posx_personatge - velocitat;
        }
    
        if (abs(vy_personatge)<0.01) {
          vy_personatge=+1;
    
          stop=true;
        }
      } else {
        posy_personatge ++;
        //posx_personatge ++;
        gravetat = 0.5;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy_personatge=-10;
      }
    
      if (baixa) {
        posy_personatge++;
      }
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
      }
    
      for (int i=0; i<100; i++) {
        noStroke();
        plataformes [i].moviment();
        plataformes[i].limit_terra();
        //if (premis[i].premi_tocat == false) {
        //  premis[i].moviment_premis();
        //  premis[i].premi_tocat();
        //}
      }//for
      //
    }//func 
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
      } else if (keyCode == DOWN) {
        baixa = true;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
      } else if (keyCode == DOWN) {
        baixa = false;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    
    // ==========================================================
    
    class Obstacles {
      float posx_terra;
      float posy_terra;
      int num;
      float midax_terra ;
      float miday_terra;
      float vx_terra;
    
      Obstacles (int espai_terra, int y_terra) {
        num = espai_terra;
        posy_terra = y_terra;
        vx_terra = -10;
        midax_terra = random (10, 14); // 100 , 400
        miday_terra = random (50, height);
      }
    
      void moviment () {
        posx_terra = num*180-scroll;
        fill (255, 0, 0);
        rect (posx_terra, posy_terra, 
          midax_terra, miday_terra);
      }
    
      void limit_terra () {
      }
      //
    }//class
    //
    
  • Thanks so much @Chrisir, what I want to happen is that the ball bounce as it does in the code you shared and the background (black platforms) moves in the x direction. But I want the background to be different every time. Thats why I want it with an array...

  • Yes I didn’t want to spoil the fun for you

    In programming this for yourself

    I just showed you how to get started

  • Start by passing more parameters to the obstacles in line 42 and 159:

    eg pos x and y and width and height for each platform

    And a speed

    Make sure you fully understand the code (there is a tutorial on objects and classes) and then enrich it with your wishes

  • //
    
    boolean salta = false;
    boolean baixa = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    
    int radi = 20;
    float gravetat = 0.98;
    int posx_personatge = 0;
    int posy_personatge = 50;
    float vy_personatge;
    float vx;
    float bounce = -0.5;
    
    
    
    float scroll; 
    int estat;
    int terra;
    color c, d;
    int velocitat;
    
    Obstacles[] plataformes; 
    
    ////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      frameRate (70);
    
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    
      plataformes = new Obstacles [100];
    
      for ( int i = 0; i < 100; i++) {
        plataformes[i] = new Obstacles(i, random(3, height/2));
      }
    }
    
    
    
    void draw() {
      background (255);
      //image(img, 0, 0);
      noStroke ();
      posx_personatge++;
    
      frameRate (70);
    
      fill(0);
      rect(0, 400, 100, height); 
      rect(100, 500, 100, height); 
      rect(200, 600, 100, height); 
      rect(300, 500, 200, height); 
    
    
    
      fill(255, 0, 0);
      ellipse(posx_personatge, posy_personatge, radi, radi);
    
      if (!stop) {
        vy_personatge += gravetat;
        posy_personatge += vy_personatge;
      }
    
      c = get(posx_personatge, posy_personatge + 10);
      if (c==color(0)) {
        gravetat = 0.1;
        vy_personatge = bounce * abs(vy_personatge);
    
        d = get(posx_personatge +10, posy_personatge);
        if (d == color (0)) {
          posx_personatge = posx_personatge - velocitat;
        }
    
        if (abs(vy_personatge)<0.01) {
          vy_personatge=+1;
    
          stop=true;
        }
      } else {
        posy_personatge ++;
        //posx_personatge ++;
        gravetat = 0.5;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy_personatge=-10;
      }
    
      if (baixa) {
        posy_personatge++;
      }
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
      }
    
      for (int i=0; i<100; i++) {
        noStroke();
        plataformes [i].moviment();
        plataformes[i].limit_terra();
        //if (premis[i].premi_tocat == false) {
        //  premis[i].moviment_premis();
        //  premis[i].premi_tocat();
        //}
      }//for
      //
    }//func 
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
      } else if (keyCode == DOWN) {
        baixa = true;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
      } else if (keyCode == DOWN) {
        baixa = false;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    
    // ==========================================================
    
    class Obstacles {
      float posx_terra=random(-1733, 3);
      float posy_terra;
      int num;
      float midax_terra ;
      float miday_terra;
      float vx_terra;
    
      Obstacles (int espai_terra, float y_terra) {
        num = espai_terra;
        posy_terra = y_terra;
        vx_terra = -10;
        midax_terra = random (30, 60); // 100 , 400
        miday_terra = 16; // random (50, height);
      }
    
      void moviment () {
        posx_terra ++; //; = num*180-scroll;
        fill (255, 0, 0);
        rect (posx_terra, posy_terra, 
          midax_terra, miday_terra);
      }
    
      void limit_terra () {
      }
      //
    }//class
    //
    
  • edited December 2017

    Okay @Chrisir! I've changed the parameters and now its closer to my objective than then! Thanks so much !! But there's something I cannot understand..

    Why the number of platforms [x] changes the ball conditions??

    I don't know why :(

    //
    
    boolean salta = false;
    boolean baixa = false;
    boolean esquerra = false;
    boolean dreta = false;
    boolean stop=false; 
    PImage img;
    
    
    int radi = 20;
    float gravetat = 0.5;
    int posx_personatge = 0;
    int posy_personatge = 50;
    float vy_personatge;
    float vx;
    float bounce = -0.5;
    
    
    
    float scroll; 
    int estat;
    int terra;
    color c, d, e;
    int velocitat = 2;
    
    Obstacles[] plataformes; 
    
    ////////////////////////////////////////////////////////////////////////////////
    
    void setup() {
      size (1280, 720);
      frameRate (70);
    
      smooth();
      noStroke();
      //img = loadImage("background1-720.png");
    
      plataformes = new Obstacles [100];
    
      for ( int i = 0; i < 100; i++) {
        plataformes[i] = new Obstacles(i, random (600,700));
      }
    }
    
    
    
    void draw() {
      background (255);
      //image(img, 0, 0);
      noStroke ();
      posx_personatge++;
       scroll+= velocitat;
    
      frameRate (70);
    
      fill(0);
      //rect(0, 400, 100, height); 
      //rect(100, 500, 100, height); 
      //rect(200, 600, 100, height); 
      //rect(300, 500, 200, height); 
    
    
    
      fill(255, 0, 0);
      ellipse(posx_personatge, posy_personatge, radi, radi);
    
    
      for (int i=0; i<100; i++) {
        noStroke();
        plataformes [i].moviment();
        plataformes[i].limit_terra();
        //if (premis[i].premi_tocat == false) {
        //  premis[i].moviment_premis();
        //  premis[i].premi_tocat();
        //}
      }//for
      //
    }//func 
    
    void keyPressed() {
      if (keyCode == UP) {
        salta = true;
      } else if (keyCode == DOWN) {
        baixa = true;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = true;
      }
    }
    
    void keyReleased() {
      if (keyCode == UP) {
        salta = false;
      } else if (keyCode == DOWN) {
        baixa = false;
      } else if (keyCode == LEFT) {
        esquerra = false;
      } else if (keyCode == RIGHT) {
        dreta = false;
      }
    }
    
    
    // ==========================================================
    
    class Obstacles {
      float posx_terra= width;
      float posy_terra;
      int num;
      float midax_terra ;
      float miday_terra;
      float vx_terra;
    
      Obstacles (int espai_terra, float y_terra) {
        num = espai_terra;
       posy_terra = y_terra;
       //vx_terra = -100;
       espai_terra = 30;
        midax_terra = random (100,400);
        miday_terra = random (50,height);
      }
    
      void moviment () {
       // posx_terra --;
        posx_terra = num*250-scroll;
        fill (0);
        rect (posx_terra, posy_terra, 
          midax_terra, miday_terra);
      }
    
      void limit_terra () {
          if (!stop) {
        vy_personatge += gravetat;
        posy_personatge += vy_personatge;
      }
    
      c = get(posx_personatge, posy_personatge + 10);
      if (c==color(0)) {
        gravetat = 0.1;
        vy_personatge = bounce * abs(vy_personatge);
    
        d = get(posx_personatge +10, posy_personatge);
        if (d == color (0)) {
          posx_personatge = posx_personatge - velocitat;
          posx_personatge --;
          posx_personatge --;
        }
    
          e =  get (posx_personatge -10, posy_personatge);
          if (e== color (0)) {
                  posx_personatge ++;
                  posx_personatge ++;
    
      }
    
        if (abs(vy_personatge)<0.01) {
          vy_personatge=+1;
    
          stop=true;
        }
    
    
      } else {
        posy_personatge ++;
        //posx_personatge ++;
        gravetat = 0.4;
      }
    
      // booleans 
      if (salta) {
        posy_personatge--;
        stop=false; 
        vy_personatge=-3;
      }
    
    
      if (esquerra) {
        posx_personatge--;
      }
    
      if (dreta) {
        posx_personatge++;
          d = get(posx_personatge +10, posy_personatge);
        if (d == color (0)) {
          posx_personatge = posx_personatge - velocitat;
          posx_personatge --;
          posx_personatge --;
        }
      }
      }
      //
    }//class
    //
    
  • I'm confused. Why is your player movement happening inside your Obstacle class?

  • edited December 2017

    Uhmmm where would you place it @TfGuy44? At void draw? But if I change the player movement the player don’t interact with platforms..

  • edited December 2017

    How would you do it? @TfGuy44 & @Chrisir Please show me! [-O<

  • ??

    just try it out for yourself

    Adress and call the player class from function draw()

    Check distance to platforms inside player class?

  • what do you mean by

    the number of platforms [x] changes the ball conditions??

  • what do you mean by

    the number of platforms [x] changes the ball conditions??

Sign In or Register to comment.