gpt4 book ai didi

java - 同时使用 WASD 和方向键

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:39 24 4
gpt4 key购买 nike

我正在使用 Processing(在 Java 上运行)开发一款两人游戏。一个用户将使用 WASD 键控制他的角色,另一个用户将使用箭头键控制移动。我遇到的问题是,在按下箭头时使用 keyPressed 会否定 WASD,反之亦然。我已经弄乱它​​很长时间了。有没有人知道解决方法或注意到我做错了什么?

//global variables
int wide = 600; //canvas width
int tall = 600; //canvas height
int s = 50; //player size
float speed = 2.5; //player movement speed

//colors
int redColor = #CB4646; //player 1 color
int blueColor = #4652CB; //player 2 color
int backgroundColor = #DBE3B3; //background color
float player1X = 600/3-s; //HOW COME width/3 DOESN'T WORK??????????
float player2X = 600*2/3;
float playerY = 600/2-(s/2);

//players
Player player1 = new Player(player1X, playerY, s, speed, "wasd", redColor); //player 1
Player player2 = new Player(player2X, playerY, s, speed, "arrows", blueColor); //player 2

//setup
void setup(){
background(backgroundColor);
size(wide, tall);
smooth();
println(player2.controls);
}

//draw
void draw(){
background(backgroundColor);
player1.usePlayer();
player2.usePlayer();
}

class Player{

//class variables
float x; // x position
float y; // y position
int s; //size
float speed; //speed
String controls; //controls
int colors; //player color
char keyControls [] = new char [4];

//construct
Player(float tempX, float tempY, int tempS , float tempSpeed, String tempControls, int tempColors){
x = tempX;
y = tempY;
s = tempS;
speed = tempSpeed;
controls = tempControls;
colors = tempColors;
}

void usePlayer(){

// draw player
fill(colors);
rect(x, y, s, s);

//move player
keyPressed();

//wraparound
boundaries();

}

void keyPressed(){

//sets controls for wasd
if(controls == "wasd"){
if(key == 'w' || key == 'W'){
y -= speed; //move forwards
}
if(key == 's' || key == 'S'){
y += speed; //move backwards
}
if(key == 'd' || key == 'D'){
x += speed; //move right
}
if(key == 'a' || key == 'A'){
x -= speed; //move left
}
}

//sets controls for arrows
if(controls == "arrows"){
if(key == CODED){
if(keyCode == UP){
y -= speed; //move forwards
}
if(keyCode == DOWN){
y += speed; //move backwards
}
if(keyCode == RIGHT){
x += speed; //move right
}
if(keyCode == LEFT){
x -= speed; //move left
}
}
}
}

//pacman style wraparound
void boundaries(){
if(x == width) x = 2;
if(y == height) y = 2;
if(x == 0) x = width-s;
if(y == 0) y = height-s;
}
}

最佳答案

独立跟踪您的 key ,不要依赖事件全局变量。

boolean[] keys = new int[255];

void keyPressed() {
keys[keyCode] = true;
}

void keyReleased() {
keys[keyCode] = false;
}

void draw() {
updatePlayers();
drawStuff();
}

void updatePlayers() {
if(keys[LEFT]) { p1.move(-1,0); }
if(keys[RIGHT]) { p1.move(1,0); }
if(keys[UP]) { p1.move(0,-1); }
if(keys[DOWN]) { p1.move(0,1); }

if(keys['a']) { p2.move(-1,0); }
if(keys['d']) { p2.move(1,0); }
if(keys['w']) { p2.move(0,-1); }
if(keys['s']) { p2.move(0,1); }
}

请注意,这必须是一系列 if 语句,因为您要处理所有按下的键。如果有人握住左手和右手,p1 将左右移动。

另请注意,此示例代码不会过滤您为特殊键获得的高于 255 的代码,因此您可能希望在事件处理程序的开头放置一个“if(keyCode>255) return” .

关于java - 同时使用 WASD 和方向键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com