【问题标题】:I'm trying to iterate through a list of Objects, using their values for collision detection. Java processing我正在尝试遍历对象列表,使用它们的值进行碰撞检测。 Java处理
【发布时间】:2023-01-20 02:25:42
【问题描述】:

我正在制作一个 2D 太空射击游戏,其中包含一系列敌人,每个敌人都有自己的值和 PVectors。我需要遍历数组列表并将每个敌人的值与玩家射弹的值进行比较。

我的碰撞代码在第 4 行出现错误。

void collision(){
  
  for(int c = 0; c < enemies.size(); c++) {
    Enemy =  enemies.get(c);
    if(projectilePos.x < enemyPos.x + enemyWidth &&
    projectilePos.x + projectileWidth > enemyPos.x &&
    projectilePos.y < enemyPos.y + enemyHeight &&
    projectileHeight + projectilePos.y > enemyPos.y){
      //colliding
      enemies.remove(c);
    }
  }

我的 PVectors 和数组列表。

//PVectors
PVector playerPos = new PVector(500, 500);
PVector projectilePos;
PVector enemyPos;

// Arrays
ArrayList<playerProjectile> PProjectiles = new ArrayList<playerProjectile>();
ArrayList<Enemy> enemies = new ArrayList<Enemy>();

//collision values
float enemyWidth = 20;
float enemyHeight = 20;
float projectileWidth = 20;
float projectileHeight = 20;

我的敌人班级

class Enemy
{
  float enemyX = 0;
  float enemyY = 0;
  float enemyMoveX;
  float enemyMoveY;
   
  Enemy(float startX, float startY){
    startX = random(1000);
    startY = 0;
    enemyPos = new PVector(startX, startY);
  }
  
  void createEnemy(){
    if (millis() - time >=2000){
      Enemy foe = new Enemy (enemyPos.x, enemyPos.y);
      enemies.add(foe);
      time = millis();
    }
  }
    
  void updateEnemy(){
   float b;
   float c;
   float speed = 1;
   float movement;
   float a = 1000 - enemyPos.y;
   b = 500 - enemyPos.x;
   c = sqrt((a * a) + (b * b));
   movement = speed / c;
   enemyMoveX = enemyX - (movement * b);
   enemyMoveY = enemyY -(movement *a);
   
   pushMatrix();
    translate(enemyPos.x, enemyPos.y);
    fill(255, 0, 64);
    ellipse(0, 0, 20, 20);
   popMatrix();
   
   enemyPos.x = enemyPos.x - enemyMoveX;
   enemyPos.y = enemyPos.y - enemyMoveY;
  }
  
}

我的弹丸课。

class playerProjectile {
  float projectileSpeedX = deltaX;
  float projectileSpeedY = deltaY;

  
 
  
  playerProjectile(float startX, float startY){
    projectilePos = new PVector(startX, startY);
  }
  
  void updateprojectile()
  {
    pushMatrix();
    translate(projectilePos.x, projectilePos.y);
    fill(234, 0, 255);
    ellipse(0, 0, 20, 20);
  popMatrix();
    projectilePos.x = projectilePos.x - projectileSpeedX;
    projectilePos.y = projectilePos.y - projectileSpeedY;
    
    
   
  }
  int maxlength = 150;
  void removeBullets()
  {
    while(PProjectiles.size() >maxlength){
      PProjectiles.remove(0);
    }
  }
}

我试过查看类似代码片段的示例,但我尝试过的所有内容都没有出现错误。

【问题讨论】:

  • 你介意分享错误吗?

标签: java processing


【解决方案1】:

您需要定义一个对象名称来接收来自敌人的值:

Enemy =  enemies.get(c);
Enemy enemy =  enemies.get(c);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多