How to add gravity to this example?

Thanks in advance!!!

int schermMode = 0; //begint bij beginscherm
PImage img;
int punten = 0;
float schiethoek = 0; //schiethoek : -100
float schiethoekrekenen;
PVector plaats; //xt --> uitendelijke pos
PVector snelheid; //vt --> kracht weggeschoten kogel(te maken met schiethoek)
PVector versnelling; //at --> voor ons de enige tegenwerkende kracht
float snelheidbegin = 70; //afschietsnelheid
float vsnelheid;
float hsnelheid;
float vrekensnelheid;
float hrekensnelheid;
PImage bg;
boolean geklikt = false;

void setup() {
  size(640, 360);
  smooth();
  plaats = new PVector(50, 340); //xt
  snelheid = new PVector(hrekensnelheid, vrekensnelheid); //vt
  versnelling = new PVector(0, 0.098); //at
  frameRate(50);
}

void draw() {
  if (schermMode == 0) {
    beginScherm();
  } else if (schermMode == 1) {
    gameScherm();
  } else if (schermMode == 2) {
    gameoverScherm();
  }
}

void beginScherm() {
  img = loadImage("beginscherm.jpg");
  background(img);
}

void gameScherm() {
  
  schiethoekrekenen = schiethoek * 180 / PI; //:-100 om echte graden te krijgen
  vsnelheid = snelheidbegin * sin(abs(schiethoek)); //schuine vector ontbinden in horizontale en verticale component
  hsnelheid = snelheidbegin * cos(abs(schiethoek));
  vrekensnelheid = vsnelheid / 10; //correctie voor verhouding met andere waarden
  hrekensnelheid = hsnelheid / 10;
  snelheid.set(hrekensnelheid, vrekensnelheid);

  img = loadImage("achtergrond.jpg");
  background(img);
  stroke(100);
  text("punten : " + punten, 20, 30); // punten
  text(schiethoekrekenen, 120, 30); //schiethoek
  
  img = loadImage("tankrood.png");
  image(img, 520, 315, 50, 50);
  rect(514, 330, 40, 4);
  fill(104, 156, 56);
  noStroke(); //geen rand
  
  img = loadImage("tank.png"); //tankzelf
  image(img, 20, 313, 50, 50);
  pushMatrix();
  translate(48, 337);
  rotate(-schiethoek);
  rect(0, 0, 25, 3); //geweer
  popMatrix();
  fill(209, 33, 0);
  noStroke(); //geen rand
  
  if (keyPressed == true) { //moet voor niet-continu beweging
    if (keyCode == LEFT) {
      schiethoek = schiethoek + 0.01;
      if (schiethoek > 1.5) { //stopt zodat hij niet te ver doordraait
        schiethoek = 1.5;
      }
    }
  }
  if (keyPressed == true) {
    if (keyCode == RIGHT) {
      schiethoek = schiethoek - 0.01;
      if (schiethoek < 0) { //stopt zodat hij niet te ver doordraait
        schiethoek = 0;
      }
    }
  }
  if (key == TAB) {
    geklikt = true;
  }
  if (geklikt == true) {
    plaats.x = plaats.x + snelheid.x;
    plaats.y = plaats.y - snelheid.y;
    snelheid.add(versnelling);
    ellipse(plaats.x, plaats.y, 9, 9); //bewegende kogel
  }
  
  
  
}





void gameoverScherm() {
  background(235, 64, 52);
}

public void mousePressed() {
  if (schermMode == 0) { //alleen doorklikken als je bij beginscherm bent
    if (mousePressed) {
      schermMode++;
    }
  }
}
//https://www.youtube.com/watch?v=PXheUQ7Ih_U
1 Like

there are things to be discussed

eg. best when you have different images (different variables with different names like PImage startImg, tankImg1, tankImg2…) and load them all in setup() because it’s time consuming to load them from draw() (or functions called by draw()), because draw() runs 60 times per second.

also, use resize in setup and later use image() only with 3 parameters, not 5. Faster.

gravity

to add gravity, add something to the value you add to the value of the ball. also make sure, the values are not resetted at start of draw(). I moved this part into the section where you check the tab key.

see Bouncy Bubbles / Examples / Processing.org

Chrisir

//snelheid

int schermMode = 0; //begint bij beginscherm
PImage img;
int punten = 0;
float schiethoek = 0; //schiethoek : -100
float schiethoekrekenen;
PVector plaats; //xt --> uitendelijke pos
PVector snelheid; //vt --> kracht weggeschoten kogel(te maken met schiethoek)
PVector versnelling; //at --> voor ons de enige tegenwerkende kracht
float snelheidbegin = 70; //afschietsnelheid
float vsnelheid;
float hsnelheid;
float vrekensnelheid;
float hrekensnelheid;
PImage bg;
boolean geklikt = false;

void setup() {
  size(640, 360);
  smooth();
  plaats = new PVector(50, 340); //xt
  snelheid = new PVector(hrekensnelheid, vrekensnelheid); //vt
  versnelling = new PVector(0, 0.098); //at
  frameRate(50);
}

void draw() {
  if (schermMode == 0) {
    beginScherm();
  } else if (schermMode == 1) {
    gameScherm();
  } else if (schermMode == 2) {
    gameoverScherm();
  }
}

void beginScherm() {
  img = loadImage("beginscherm.jpg");
  background(0);
}

void gameScherm() {



  img = loadImage("achtergrond.jpg");
  background(0);
  stroke(100);
  text("punten : " + punten, 20, 30); // punten
  text(schiethoekrekenen, 120, 30); //schiethoek

  img = loadImage("tankrood.png");
  text("tank", 520, 315
    );
  rect(514, 330, 40, 4);
  fill(104, 156, 56);
  noStroke(); //geen rand

  img = loadImage("tank.png"); //tankzelf
  text("img2", 20, 313);
  pushMatrix();
  translate(48, 337);
  rotate(-schiethoek);
  rect(0, 0, 25, 3); //geweer
  popMatrix();
  fill(209, 33, 0);
  noStroke(); //geen rand

  if (keyPressed == true) { //moet voor niet-continu beweging
    if (keyCode == LEFT) {
      schiethoek = schiethoek + 0.01;
      if (schiethoek > 1.5) { //stopt zodat hij niet te ver doordraait
        schiethoek = 1.5;
      }
    }
  }
  if (keyPressed == true) {
    if (keyCode == RIGHT) {
      schiethoek = schiethoek - 0.01;
      if (schiethoek < 0) { //stopt zodat hij niet te ver doordraait
        schiethoek = 0;
      }
    }
  }
  if ((keyPressed == true) && key == TAB) {
    geklikt = true;

    schiethoekrekenen = schiethoek * 180 / PI; //:-100 om echte graden te krijgen
    vsnelheid = snelheidbegin * sin(abs(schiethoek)); //schuine vector ontbinden in horizontale en verticale component
    hsnelheid = snelheidbegin * cos(abs(schiethoek));
    vrekensnelheid = vsnelheid / 10; //correctie voor verhouding met andere waarden
    hrekensnelheid = hsnelheid / 10;
    snelheid.set(hrekensnelheid, vrekensnelheid);
  }

  if (geklikt) {
    plaats.x = plaats.x + snelheid.x;
    plaats.y = plaats.y - snelheid.y;
    snelheid.y-=.21; 
    snelheid.add(versnelling);
    ellipse(plaats.x, plaats.y, 
      9, 9); //bewegende kogel
  }
}





void gameoverScherm() {
  background(235, 64, 52);
}

public void mousePressed() {
  if (schermMode == 0) { //alleen doorklikken als je bij beginscherm bent
    if (mousePressed) {
      schermMode++;
    }
  }
}
//https://www.youtube.com/watch?v=PXheUQ7Ih_U
//
1 Like

Hello,

This was a good resource for me exploring gravity:
https://natureofcode.com/book/

Something I did a while back:

:)

1 Like