java - 尝试将开放处理代码转换为pj.5s

标签 java html css arraylist p5.js

我不知道如何将其更改为 p5.js。只是尝试进行转化。请帮助我让这段代码在 p5.js 中工作。

我知道这是旧代码,p5.js 有不同的规则。也许阵列不起作用。我不知道。

    Myself myself;
ArrayList<Enemy> enemies;
`enter code here`ArrayList<Enemy> enemies;
ArrayList<Bullet> myBullets;
ArrayList<Bullet> eneBullets;

void setup(){

  size(640, 640);
  rectMode(CENTER);
  myself = new Myself();
  enemies = new ArrayList<Enemy>();
  myBullets = new ArrayList<Bullet>();
  eneBullets = new ArrayList<Bullet>(); 
}

void draw(){
  background(0);
  myself.display();
  for(Enemy enemy: enemies){
    enemy.display();
  }
  for(Bullet bullet: myBullets){
    bullet.display();
  }
  for(Bullet bullet: eneBullets){
    bullet.display();
  }

  myself.update();
  ArrayList<Enemy> nextEnemies = new ArrayList<Enemy>();
  for(Enemy enemy: enemies){
    enemy.update();
    if(!enemy.isDead){
      nextEnemies.add(enemy);
    }
  }
  enemies = nextEnemies;
  ArrayList<Bullet> nextMyBullets = new ArrayList<Bullet>();
  for(Bullet bullet: myBullets){
    bullet.update();
    if(!bullet.isDead){
      nextMyBullets.add(bullet);
    }
  }
  myBullets = nextMyBullets;
  ArrayList<Bullet> nextEneBullets = new ArrayList<Bullet>();
  for(Bullet bullet: eneBullets){
    bullet.update();
    if(!bullet.isDead){
      nextEneBullets.add(bullet);
    }
  }
  eneBullets = nextEneBullets;
  if(random(1) < 0.02){
    enemies.add(new Enemy());
  }
}

class Myself{

  PVector loc;
  float size;
  int coolingTime;
  boolean isDead;

  Myself(){
    size = 25;
    loc = new PVector(width / 2, height - size / 2 - 10);
    coolingTime = 0;
    isDead = false;
  }

  void display(){
    if(isDead){
      fill(255, 255, 0);
      stroke(0, 255, 0); 
    } else {
      noFill();
      stroke(0, 255, 0);
    }
    rect(loc.x, loc.y, size, size);
  }

  void update(){
    isDead = false;
    float dmx = mouseX - loc.x;
    dmx = constrain(dmx, -5, 5);
    loc.x += dmx;
    coolingTime++;
    if(mousePressed && coolingTime >= 10){
      myBullets.add(new Bullet());
      coolingTime = 0;
    }
    for(Bullet b: eneBullets){
      if((loc.x - size / 2 <= b.loc.x && b.loc.x <= loc.x + size / 2)
         && (loc.y - size / 2 <= b.loc.y && b.loc.y <= loc.y + size / 2)){
        isDead = true;
        b.isDead = true;
        break;
      }
    }
    for(Enemy e: enemies){
      if(abs(loc.x - e.loc.x) < size / 2 + e.size / 2 && abs(loc.y - e.loc.y) < size / 2 + e.size / 2){
        isDead = true;
        e.isDead = true;
        break;
      }
    }
  }
}

class Bullet{

  PVector loc;
  float vel;
  boolean isMine;
  boolean isDead;

  Bullet(){
    loc = new PVector(myself.loc.x, myself.loc.y);
    vel = -10;
    isMine = true;
  }

  Bullet(Enemy enemy){
    loc = new PVector(enemy.loc.x, enemy.loc.y);
    vel = 5;
    isMine = false;
  }

  void display(){
    if(isMine){
      stroke(0, 255, 0);
    } else {
      stroke(255, 0, 0);    
    }
    line(loc.x, loc.y, loc.x, loc.y + vel);    
  }

  void update(){
    loc.y += vel;
    if((vel > 0 && loc.y > height) || (vel < 0 && loc.y < 0)){
      isDead = true;
    }
  }  
}

class Enemy{

  PVector loc;
  float vel;
  float size;
  int coolingTime;
  boolean isDead;

  Enemy(){
    size = 25;
    loc = new PVector(random(size / 2, width - size / 2), -size / 2);
    vel = 3;
    coolingTime = int(random(60));
    isDead = false;
  }

  void display(){
    noFill();
    stroke(255, 0, 0);
    rect(loc.x, loc.y, size, size);
  }

  void update(){
    loc.y += vel;
    if(loc.y > height){
      isDead = true;
    }
    coolingTime++;
    if(coolingTime >= 60){
      eneBullets.add(new Bullet(this));
      coolingTime = 0;
    }
    for(Bullet b: myBullets){
      if((loc.x - size / 2 <= b.loc.x && b.loc.x <= loc.x + size / 2)
         && (loc.y - size / 2 <= b.loc.y && b.loc.y <= loc.y + size / 2)){
        isDead = true;
        b.isDead = true;
        break;
      }
    }
  }    
}

如果您能告诉我需要更改或修复哪些部分,那将对我很有帮助,谢谢。

最佳答案

您不应该尝试逐行翻译代码。相反,您需要退后一步并了解程序的作用,然后用目标语言实现它。

Processing 的语法(基于 Java)与 p5.js(基于 JavaScript)的语法非常不同。

您需要考虑代码的实际用途,而不是尝试“转换”代码。然后在 p5.js 中开始一个新程序并使用 p5.js 来执行此操作。它并不总是逐行转换。

关于java - 尝试将开放处理代码转换为pj.5s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61986610/

相关文章:

javascript - 一张图片的不同浏览器窗口高度

java - 为什么使变量公开可见性是一种不好的做法

Java Swing 问题 - 使用调色板

javascript - 如何在HEAD HTML中切换JS代码,该按钮响应点击

jquery - anchor 标签表现怪异

html - 如何将 3 个 HTML 元素放在一行中?

java - 为什么要使用多态?

java - Log4j没有记录任何内容(Gradle/Eclipse)

已修复 span 的 HTML 问题

javascript - jquery确认多次显示文本