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
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!
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.