我有以下代码让我的玩家移动:
class Player {
PVector direction;
PVector location;
float rotation;
int speed;
Player() {
location = new PVector(width/2, height/2);
speed =2;
}
void visualPlayer() {
direction = new PVector(mouseX, mouseY);
rotation = atan2(direction.y - location.y, direction.x - location.x)/ PI * 180;
if (keyPressed) {
if ((key == 'w' && dist(location.x, location.y, direction.x, direction.y)>5) || (key == 'w' && key == SHIFT && dist(location.x, location.y, direction.x, direction.y)>5)) {
speed = 2;
location.x = location.x + cos(rotation/180*PI)*speed;
location.y = location.y + sin(rotation/180*PI)*speed;
if (key == SHIFT) {
speed = 5;
}
}
} else {
location.x = location.x;
location.y = location.y;
}
println(speed);
ellipse(location.x, location.y, 10, 10);
}
}
当我按下w键时,播放器朝着鼠标的方向移动。但是如果我按下shift键,我想让玩家移动得更快。但是现在当我按下shift键时我的播放器停止移动......为什么会发生这种情况?我欢迎任何帮助我解决这个问题的建议:)
答案 0 :(得分:0)
这两个if
语句绝不会两者为真:
if ((key == 'w' ) {
if (key == SHIFT) {
key
变量在调用draw()
函数时只有一个值。
实际上,key
变量的值永远不会为SHIFT
。相反,您需要使用keyCode
变量。
由于您尝试检测多个按键,因此您需要执行我在your other question中要求您执行的操作:您需要使用一组boolean
值来跟踪哪些按下键,然后在draw()
功能中使用它们。
这里有一个小例子,可以准确显示我在说什么:
boolean wPressed = false;
boolean shiftPressed = false;
void draw() {
background(0);
if (wPressed && shiftPressed) {
background(255);
}
}
void keyPressed(){
if(key == 'w' || key == 'W'){
wPressed = true;
}
if(keyCode == SHIFT){
shiftPressed = true;
}
}
void keyReleased(){
if(key == 'w' || key == 'W'){
wPressed = false;
}
if(keyCode == SHIFT){
shiftPressed = false;
}
}
有关详细信息,请参阅处理中的用户输入the reference或this tutorial。