Help with updating variable for tank game

Naamloos Hi! I’m new to the platform but i have a question… Sorry for all the Dutch ‘variable-names’, however, i hope you will understand. I want to tilt my tank gun, and the value ‘schiethoek, (angle)’ changes. So the ball’s velocity changes too, but it stays constant all the time, even when i rotate the gun! Please help :slight_smile:

int schermMode = 0; //begint bij beginscherm
PImage img;
int punten = 0;
float schiethoek = -1.30 ; //schiethoek : -100
float schiethoekrekenen = schiethoek * 180 / PI; //:-100 om echte graden te krijgen
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 = snelheidbegin * sin(abs(schiethoekrekenen)); //schuine vector ontbinden in horizontale en verticale component
float hsnelheid = snelheidbegin * cos(abs(schiethoekrekenen));
float vrekensnelheid = vsnelheid / 10; //correctie voor verhouding met andere waarden
float hrekensnelheid = hsnelheid / 10;
PImage bg;
boolean geklikt = false;




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



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() {
  
  img = loadImage("achtergrond.jpg");
  background(img);
  stroke(100);
  text("punten : "+punten, 20,30); // punten
  

 
 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.02;
      if (schiethoek<-1.5) { //stopt zodat hij niet te ver doordraait
        schiethoek = -1.5;
      }
    }
  }
  if (keyPressed == true) {
   if (keyCode == RIGHT) {
      schiethoek = schiethoek + 0.02;
      if (schiethoek > 0.20) { //stopt zodat hij niet te ver doordraait
        schiethoek = 0.20;
      }
   }
  }

if (key == TAB) {
    geklikt = true;
  }
  if (geklikt == true) {
    plaats.add(snelheid);
    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++;
    }
  }
}



I believe your problem originates from the fact you calculate the vsnelheid variable outside of void draw(). You initalize the value with the other variables, which means it would not change unless specified elsewhere. If you moved vsnelheid = snelheidbegin * sin(abs(sciethoekrekenen));
into void draw(), it would update the velocity speed constantly.
You would replace what you had originally with simply

float vsnelheid;

and move the calculation into void draw().
Short example;

float vsnelheid;

void draw() {
vsnelheid = snelheidbegin * sin(abs(schiethoekrekenen)); //schuine vector ontbinden in horizontale en verticale component
//^op deze manier controleert en verandert vsnelheid elk frame
//in plaats van alleen in initialisatie.
  if (schermMode == 0) {
    beginScherm();
  } else if (schermMode == 1) {
    gameScherm();
  } else if (schermMode == 2) {
    gameoverScherm();
  }
}

Thanks alot !! You were right about the variables that must be set in draw(), but now the ball is going backwards even when the vectors are correct… Do you have any idea why? Does it has something to do with the place of the bal (plaats.x, plaats.y) that is defined at last? Thanks in advance!

Naamloos2

int schermMode = 0; //begint bij beginscherm
PImage img;
int punten = 0;
float schiethoek = -1.30; //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(0, 360); //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() {
	float schiethoekrekenen = schiethoek * 180 / PI; //:-100 om echte graden te krijgen
	float vsnelheid = snelheidbegin * sin(abs(schiethoekrekenen)); //schuine vector ontbinden in horizontale en verticale component
	float hsnelheid = snelheidbegin * cos(abs(schiethoekrekenen));
	float vrekensnelheid = vsnelheid / 10; //correctie voor verhouding met andere waarden
	float hrekensnelheid = hsnelheid / 10;
	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.20) { //stopt zodat hij niet te ver doordraait
				schiethoek = 0.20;
			}
		}
	}
	if (key == TAB) {
		geklikt = true;
	}
	if (geklikt == true) {
		plaats.add(snelheid);
		snelheid.add(versnelling);
		ellipse(plaats.x, plaats.y, 9, 9); //bewegende kogel
	}
	println(vrekensnelheid);
	println(hrekensnelheid);
}
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

I’m not sure, but if you use println(plaats.x), the location ‘.x’ value in the vector does not appear to change(stays at zero), so that may be an indicator of the problem. Perhaps you failed to write code that specified the new value of plaats.x after the inital setting of the vector, leaving it at zero.