【发布时间】:2013-02-12 03:13:20
【问题描述】:
我正在使用 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;
}
}
【问题讨论】:
-
这是否与键盘不能一次注册超过 2-6 个(取决于哪些)键有关?
-
@Patashu,我不这么认为,因为当我同时按两个时它不起作用。
-
请注意,这实际上不是 Java 问题,而是处理问题。 Processing 是一个非常特殊的 API,其编程模型与 Java 略有不同(它被重写为 java 以便在 JVM 中离线使用,但在浏览器中在线使用时它被重写为 JavaScript)
-
@Mike'Pomax'Kamermans 感谢您提供的信息,我不知道!以后我将避免发布带有 Java 标记的处理问题。
标签: java keyboard processing 2d-games