所以,我正试着自学如何制作小游戏,我想制作一款自上而下的游戏.总的来说,我对编码仍然是个新手,所以我的代码并不是最好的.我试图创建一个移动系统,但当我按住两个键时,代码只使用最后一次按键.我判断它们是否通过使用print(Key);语句进行了注册,从而确认了这一点.

到目前为止,我try 使用通过keyPressed()和keyRelease()方法打开和关闭的布尔值.我也在Player类中try 了这一点,到目前为止,它只是一个RECT,它的x和y变量在被按下的键上进行了深入的更新.当前的移动代码来self 在处理过程中制作的一个乒乓球游戏的修改版本,在那里移动确实有效.附件下面是我的代码.有谁有什么建议吗?

boolean gameStart = false;

boolean up = false;
boolean down = false;
boolean left = false;
boolean right = false;
 
Player p;

void setup(){
  size(1000,1000);
  p = new Player();
}

void draw(){
  if(!gameStart){
    menu();
  }
  else{
    game();
  }
}

void menu(){
  background(0);
  textSize(90);
  
  stroke(110);
  strokeWeight(10);
  fill(0);
  rectMode(CENTER);
  rect(500,600,300,150);
  fill(255);
  text("GAME",385,300);
  text("PLAY",400,625);
  if(mousePressed && ((mouseX > 350 && mouseX < 650) && (mouseY > 525 && mouseY < 675))){
    gameStart = true;
    noStroke();
  }
}

void keyPressed(){
  if(key == 'w'){
    up = true;
  }
  else if(key == 's'){
    down = true;
  }
  else if(key == 'd'){
    right = true;
  }
  else if(key == 'a'){
    left = true;
  }
}

void keyReleased(){
  if(key == 'w'){
    up = false;
  }
  else if(key == 's'){
    down = false;
  }
  else if(key == 'd'){
    right = false;
  }
  else if(key == 'a'){
    left = false;
  }
}

void game(){
  background(0);
  p.update();
  p.render();
}

class Player{
  
  float x = 500;
  float y = 500;
  
  
    
  
  void player(float x, float y){
    this.x = x;
    this.y = y;
  }
  
  void update(){
    if(up){
      y-=7.5;
    }
    else if(down){
      y+=7.5;
    }
    else if(left){
      x-=7.5;
    }
    else if(right){
      x+=7.5;
    }
  }
  void render(){
    fill(255,0,0);
    rect(x,y,100,100);
  }
}
  
  

推荐答案

下面的源代码将在同时按下两个键时沿对角线移动一个矩形.布尔数组用于跟踪按键.

boolean[] keyDwn = new boolean[4];

final int _keyA = 65;
final int _keyW = 87;
final int _keyS = 83;
final int _keyD = 68;

int x, y;

void setup() {
  size(600, 600);
  surface.setTitle("A=up : S=left : W=down : D=right : AS=diagonal : WD=diagonal ");
  // init values
  keyDwn[0] = false;
  keyDwn[1] = false;
  keyDwn[2] = false;
  keyDwn[3] = false;
  fill(0, 0, 255); // color for rectangle
  x = width/2;  
  y = height/2; 
}

void draw() {
  background(209);
  moveObj();
  rect(x, y, 100, 100);
}

void keyPressed() {
  if (keyCode == _keyA) {
    keyDwn[0] = true;
    println("keyA pressed = ", keyCode);
  }
  if (keyCode == _keyW) {
    keyDwn[1] = true;
    println("keyW pressed = ", keyCode);
  }
  if (keyCode == _keyS) {
    keyDwn[2] = true;
    println("keyS pressed = ", keyCode);
  }
  if (keyCode == _keyD) {
    keyDwn[3] = true;
    println("keyD pressed = ", keyCode);
  }
}

void keyReleased() {
  if (keyCode == _keyA) {
    keyDwn[0] = false;
  }
  if (keyCode == _keyW) {
    keyDwn[1] = false;
  }
  if (keyCode == _keyS) {
    keyDwn[2] = false;
  }
  if (keyCode == _keyD) {
    keyDwn[3] = false;
  }
}

void moveObj() {
  if (keyDwn[0]) y -= 3;
  if (keyDwn[1]) y += 3;
  if (keyDwn[2]) x -= 5;
  if (keyDwn[3]) x += 5;
}

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

对运行在GraalVM-21上的JavaFX应用程序使用分代ZGC会警告不支持JVMCI,为什么?

使用意向过滤器从另一个应用程序启动服务

我需要生成一个文件来整合每个特性执行的所有JSON结果

内存中的H2修剪尾随空格

在Java中如何从Executors.newFixedThreadPool(MAX_THREAD_COUNT())迁移到虚拟线程

如何获取Instant#of EpochSecond(?)的最大值

Java连接池无法正常工作

使用存储在字符串变量中的路径目录打开.pdf文件

Java 11 HttpCookie.parse在解析包含JSON的Cookie时引发IlLegalArgumentException

使用SWIG将C++自定义单元类型转换为基本Java类型

如何在ImageIO或十二只猴子中旋转TIFF CMYK图像?

在Java中将对象&转换为&q;HashMap(&Q)

用于Java的Visual Studio代码完成不起作用

JXBrowser是否支持加载Chrome扩展?

使用同步方法中的新线程调用同步方法

如果c不为null,Arrays.sort(T[]a,Comparator<;?super T>;c)是否会引发ClassCastException?

[Guice/MissingImplementation]:未绑定任何实现

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别

OpenAPI Maven插件生成错误的Java接口名称