We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello everyone,
I am working on a game project which has a player sprite that moves using the WSAD keys. W and S move the player forwards and backwards while A and D rotate left and right. Below is the code I used to perform this.
class Player {
float inputX, inputY, z, v;
float inputW, inputH;
float SPD = 2, ROT = .05;
Player(float posX, float posY, float posW, float posH) {
inputX = posX;
inputY = posY;
inputW = posW;
inputH = posH;
}
void update() {
v = (up? SPD : 0) - (down? SPD : 0);
z += (right? ROT : 0) - (left? ROT : 0);
if (inputX < 370 && cos(z) < 0 || inputX > 1550 && cos(z) > 0) {
SPD = 0;
} else {
SPD = 2;
}
if (inputY < 50 && sin(z) < 0 || inputY > 600 && sin(z) > 0) {
SPD = 0;
}
inputX += cos(z)*v;
inputY += sin(z)*v;
}
void display() {
translate(inputX, inputY);
rotate(z);
noStroke();
fill(#008000);
rect(inputW/-2, inputH/-2, inputW, inputH);
stroke(0);
noFill();
ellipse(10, 0, 5, 5);
}
}
My problem is that I am trying to have the player character move "underneath" other objects on the map. Normally I would do this by placing the object lower in the programing, but when I do that with the code the translate(inputX, inputY) effects the objects as well and they move and rotate as the player does. How can I rewrite this code to only effect the player sprite?
Thank you for the help.
Answers
Use
pushMatrix()
andpopMatrix()
. Specifically, usepushMatrix()
before yourtranslate()
androtate()
calls, andpopMatrix()
aftter you've drawn your player.As always TfGuy44, that is very helpful. Thank you!