在 Processing 3.5.3 中制作基本跳跃(如涂鸦跳跃),但我无法让玩家在跳跃中移动?
Making a Basic Jumper (like Doodle Jump) in Processing 3.5.3, but I can't get the player to move mid-jump?
下面是我的代码,据我了解,玩家应该在空中同时移动和跳跃,因为在 draw() 函数中,它是两个 if 语句,而不是 if-else。我假设 keyPressed() 会不断检查键盘输入,因为按住一个键会使方块不断移动。但是,在跳跃之后,如果在立方体跳跃中开始按住该键,则角色根本不会移动。请帮忙!
这段代码实际上就是整个项目;我计划在未来添加平台,然后我会从那里开始。
boolean newletter;
boolean direction;
boolean jump;
float velocity;
float velocityconst;
Player player;
class Player {
color c;
float xpos;
float ypos;
float xspeed;
Player(color clr, float xPos, float yPos, float xSpeed) {
c = clr;
xpos = xPos;
ypos = yPos;
xspeed = xSpeed;
}
void display() {
rectMode(CENTER);
noStroke();
fill(c);
rect(xpos,ypos,20,20);
}
void drive(boolean dir) {
if ((xpos + xspeed) > width && (dir)) {
float remainder = float(width) - xpos;
xpos = 0 + (xspeed - remainder);
} else if ((xpos - xspeed) < 0 && !(dir)) {
float remainder = xpos - 0;
xpos = width - (xspeed - remainder);
} else {
if (dir) xpos += xspeed;
else xpos -= xspeed;
}
}
void jump() {
velocity = velocity + 0.5;
if(ypos + velocity > (height/2)) {
ypos = height/2;
jump = false;
velocity = velocityconst;
} else {
ypos += velocity;
}
}
}
void setup() {
size(1000,1000);
player = new Player(color(255,0,0),0,height/2,10);
velocityconst = -8.0;
velocity = velocityconst;
}
void draw() {
background(255);
if(newletter == true) {
player.drive(direction);
}
if(jump == true) {
player.jump();
}
player.display();
newletter = false;
}
void keyPressed()
{
if((key == 'A') || (key == 'a')) {
direction = false;
newletter = true;
} else if ((key == 'D') || (key == 'd')) {
direction = true;
newletter = true;
} else {
newletter = false;
}
if ((key == 'W') || (key == 'w')) {
jump = true;
}
}
阻止的原因有 2 个,即玩家同时移动和跳跃。
- 指示移动的状态(
newletter
)在每一帧中被重置:
void draw() {
// [...]
newletter = false;
}
- 当按下的键不是a或d时,则运动停止:
void keyPressed()
{
if((key == 'A') || (key == 'a')) {
// [...]
} else if ((key == 'D') || (key == 'd')) {
// [...]
} else {
newletter = false;
}
// [...]
}
不要在draw()
停止移动:
void draw() {
background(255);
println(newletter, " ", jump);
if(newletter == true) {
player.drive(direction);
}
if(jump == true) {
player.jump();
}
player.display();
}
并且在按下 w(或其他键)时不要停止它:
void keyPressed()
{
if(key == 'A' || key == 'a') {
direction = false;
newletter = true;
} else if (key == 'D' || key == 'd') {
direction = true;
newletter = true;
}
if (key == 'W' || key == 'w') {
jump = true;
}
}
但是添加一个keyReleased()
回调,停止运动,当a或d被释放时:
void keyReleased()
{
if (key == 'A' || key == 'a' || key == 'D' || key == 'd') {
newletter = false;
}
}
下面是我的代码,据我了解,玩家应该在空中同时移动和跳跃,因为在 draw() 函数中,它是两个 if 语句,而不是 if-else。我假设 keyPressed() 会不断检查键盘输入,因为按住一个键会使方块不断移动。但是,在跳跃之后,如果在立方体跳跃中开始按住该键,则角色根本不会移动。请帮忙!
这段代码实际上就是整个项目;我计划在未来添加平台,然后我会从那里开始。
boolean newletter;
boolean direction;
boolean jump;
float velocity;
float velocityconst;
Player player;
class Player {
color c;
float xpos;
float ypos;
float xspeed;
Player(color clr, float xPos, float yPos, float xSpeed) {
c = clr;
xpos = xPos;
ypos = yPos;
xspeed = xSpeed;
}
void display() {
rectMode(CENTER);
noStroke();
fill(c);
rect(xpos,ypos,20,20);
}
void drive(boolean dir) {
if ((xpos + xspeed) > width && (dir)) {
float remainder = float(width) - xpos;
xpos = 0 + (xspeed - remainder);
} else if ((xpos - xspeed) < 0 && !(dir)) {
float remainder = xpos - 0;
xpos = width - (xspeed - remainder);
} else {
if (dir) xpos += xspeed;
else xpos -= xspeed;
}
}
void jump() {
velocity = velocity + 0.5;
if(ypos + velocity > (height/2)) {
ypos = height/2;
jump = false;
velocity = velocityconst;
} else {
ypos += velocity;
}
}
}
void setup() {
size(1000,1000);
player = new Player(color(255,0,0),0,height/2,10);
velocityconst = -8.0;
velocity = velocityconst;
}
void draw() {
background(255);
if(newletter == true) {
player.drive(direction);
}
if(jump == true) {
player.jump();
}
player.display();
newletter = false;
}
void keyPressed()
{
if((key == 'A') || (key == 'a')) {
direction = false;
newletter = true;
} else if ((key == 'D') || (key == 'd')) {
direction = true;
newletter = true;
} else {
newletter = false;
}
if ((key == 'W') || (key == 'w')) {
jump = true;
}
}
阻止的原因有 2 个,即玩家同时移动和跳跃。
- 指示移动的状态(
newletter
)在每一帧中被重置:
void draw() { // [...] newletter = false; }
- 当按下的键不是a或d时,则运动停止:
void keyPressed() { if((key == 'A') || (key == 'a')) { // [...] } else if ((key == 'D') || (key == 'd')) { // [...] } else { newletter = false; } // [...] }
不要在draw()
停止移动:
void draw() {
background(255);
println(newletter, " ", jump);
if(newletter == true) {
player.drive(direction);
}
if(jump == true) {
player.jump();
}
player.display();
}
并且在按下 w(或其他键)时不要停止它:
void keyPressed()
{
if(key == 'A' || key == 'a') {
direction = false;
newletter = true;
} else if (key == 'D' || key == 'd') {
direction = true;
newletter = true;
}
if (key == 'W' || key == 'w') {
jump = true;
}
}
但是添加一个keyReleased()
回调,停止运动,当a或d被释放时:
void keyReleased()
{
if (key == 'A' || key == 'a' || key == 'D' || key == 'd') {
newletter = false;
}
}