Processing 2D阵列导致动画小故障(处理)

Processing 2D阵列导致动画小故障(处理),processing,Processing,简介: 对于任务,我必须创建一个具有我自己主题的空间入侵者游戏(使用处理)。我已经创造了一个太空船,它可以左右移动,也可以发射。我还创造了一个一直向下移动的敌人。我现在想使用2D阵列(我必须使用2D阵列,任务中的规格)来创建敌人舰队。我希望舰队排成3排,每排有5个敌人 问题: 当我自己实现2D阵列时,舰队的移动会在稍微下降后停止。当我不使用2D阵列,只有一个敌人时,它会很好地下降。因此,我希望Stackoverflow的杰出人士能帮助我弄清楚为什么会发生这种情况,以及我们如何解决这一问题。如果你

简介: 对于任务,我必须创建一个具有我自己主题的空间入侵者游戏(使用处理)。我已经创造了一个太空船,它可以左右移动,也可以发射。我还创造了一个一直向下移动的敌人。我现在想使用2D阵列(我必须使用2D阵列,任务中的规格)来创建敌人舰队。我希望舰队排成3排,每排有5个敌人

问题: 当我自己实现2D阵列时,舰队的移动会在稍微下降后停止。当我不使用2D阵列,只有一个敌人时,它会很好地下降。因此,我希望Stackoverflow的杰出人士能帮助我弄清楚为什么会发生这种情况,以及我们如何解决这一问题。如果你能像对付一个敌人一样,在舰队倒下的情况下成功地实现2D阵列,那么你就完全找到了我一周来一直在尝试的东西

链接: 到目前为止,我已经为这个游戏编写了代码。请注意,这些代码将显示只有一个敌人的游戏,而不是有敌人舰队和故障的游戏

谢谢你们,我希望你们能帮助我学习和提高我的技能

注意:我的代码很混乱,我使用的名称也很糟糕,我知道,我会在提交之前修复所有这些



需要我们为您调试的代码太多了。你应该试着发一封邮件。例如,您的问题与玩家的移动、子弹、游戏模式或字体无关,因此您不妨将其删除

以下是解决您的问题的MCVE的外观:

Cell[][] grid;

boolean movingDown=false;
boolean movingRight=true;
boolean movingLeft=false;

void setup() {
  size(900, 600);

  int cols = 5;
  int rows = 2;
  grid = new Cell[cols][rows];
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      // Initialize each object
      grid[i][j] = new Cell(i*(width-800), j*200, 20, 20);
    }
  }
}

void draw() {
  background(0);

  for (int i = 0; i < grid.length; i++) {
    for (int j = 0; j < grid[i].length; j++) {
      grid[i][j].display2();
    }
  }
}

class Cell {
  float cX, cY;   

  Cell(float tempX, float tempY, float tempW, float tempH) {
    cX = tempX;
    cY = tempY;
  } 

  void display2() {
    stroke(255, 0, 0);
    fill(255, 0, 0);
    rect(cX+30, cY+100, 5, 5);
    rect(cX+35, cY+95, 5, 5);
    rect(cX+35, cY+90, 5, 5);
    rect(cX+40, cY+85, 5, 5);
    rect(cX+45, cY+80, 5, 5);
    rect(cX+50, cY+80, 5, 5);
    rect(cX+55, cY+75, 5, 5);
    rect(cX+60, cY+75, 5, 5);
    rect(cX+65, cY+75, 5, 5);
    rect(cX+70, cY+75, 5, 5);
    rect(cX+75, cY+80, 5, 5);
    rect(cX+80, cY+80, 5, 5);
    rect(cX+85, cY+85, 5, 5);
    rect(cX+90, cY+90, 5, 5);
    rect(cX+90, cY+95, 5, 5);
    rect(cX+95, cY+100, 5, 5);
    rect(cX+95, cY+105, 5, 5);
    rect(cX+95, cY+110, 5, 5);
    rect(cX+95, cY+115, 5, 5);
    rect(cX+90, cY+120, 5, 5);
    rect(cX+85, cY+120, 5, 5);
    rect(cX+80, cY+120, 5, 5);
    rect(cX+75, cY+115, 5, 5);
    rect(cX+70, cY+115, 5, 5);
    rect(cX+70, cY+120, 5, 5);
    rect(cX+70, cY+125, 5, 5);
    rect(cX+65, cY+115, 5, 5);
    rect(cX+60, cY+115, 5, 5);
    rect(cX+55, cY+115, 5, 5);
    rect(cX+55, cY+120, 5, 5);
    rect(cX+55, cY+125, 5, 5);
    rect(cX+50, cY+115, 5, 5);
    rect(cX+45, cY+115, 5, 5);
    rect(cX+45, cY+120, 5, 5);
    rect(cX+40, cY+120, 5, 5);
    rect(cX+35, cY+120, 5, 5);
    rect(cX+30, cY+115, 5, 5);
    rect(cX+30, cY+110, 5, 5);
    rect(cX+30, cY+105, 5, 5);
    rect(cX+40, cY+125, 5, 5);
    rect(cX+40, cY+130, 5, 5);
    rect(cX+45, cY+135, 5, 5);
    rect(cX+50, cY+140, 5, 5);
    rect(cX+55, cY+140, 5, 5);
    rect(cX+60, cY+140, 5, 5);
    rect(cX+65, cY+140, 5, 5);
    rect(cX+70, cY+140, 5, 5);
    rect(cX+75, cY+140, 5, 5);
    rect(cX+80, cY+135, 5, 5);
    rect(cX+85, cY+130, 5, 5);
    rect(cX+85, cY+125, 5, 5);

    if (movingRight) {  //moving right
      movingDown = false;
      movingLeft = false;
      cX += 2;
    } else if (movingLeft) { //moving left
      movingDown = false;
      movingRight = false;
      cX -= 2;
    }

    if ( (movingRight && cX >= 780) || (movingLeft == true && cX <= -1)) 
    {
      movingDown = true;  //moving down
      movingRight = false;
      movingLeft = false;
    }

    if (movingDown) //moving down
    {
      cY += 3;
      if (cY % 10 == 0)  //moving down 10 pixels
      {
        movingDown=false;
        if ( cX >= 780)  //if it is on the right edge
        {
          movingRight = false;
          movingLeft = true;
        } else if ( cX <= -1 ) //if it is on the left edge
        {
          movingRight = true;
          movingLeft = false;
          cY += 3;
        }
      }
    }
  }
}
Cell[][]网格;
布尔向下移动=假;
布尔movingRight=true;
布尔左移=假;
无效设置(){
大小(900600);
int cols=5;
int行=2;
网格=新单元格[列][行];
for(int i=0;i=780)| |(movingLeft==true&&cX=780)//如果它位于右边缘
{
movingRight=错误;
左移=真;

}else if(cX)我如何具体控制2D阵列中的单个对象?我知道如何移动整个舰队,但如何指定舰队中左上角的敌人?
ArrayList <Bullet> bullets;

class Bullet
{
  float x;
  float y;
  float speed;
  Bullet(float tx, float ty)
  {
    x = tx;
    y = ty;
  }
  void display()
  {
    stroke(255, 0, 0);
    fill(255);
    ellipse(x,y, 10, 10);
  }
  void move()
  {
    y -= 5;
  }
}
void moveAll()
{
  for(Bullet temp : bullets)
  {
    temp.move();
  }
}
void displayAll()
{
  for(Bullet temp : bullets)
  {
    temp.display();
  }
}
Cell[][] grid;

boolean b3=false;
boolean b4=true;
boolean b5=false;

int cols = 5;
int rows = 2;
color pixel;

class Cell {
  float cX,cY;   


  Cell(float tempX, float tempY, float tempW, float tempH) {
    cX = tempX;
    cY = tempY;
  } 

  void display2() {
    stroke(255, 0, 0);
    fill(255, 0, 0);
    rect(cX+30,cY+100,5,5);
    rect(cX+35,cY+95,5,5);
    rect(cX+35,cY+90,5,5);
    rect(cX+40,cY+85,5,5);
    rect(cX+45,cY+80,5,5);
    rect(cX+50,cY+80,5,5);
    rect(cX+55,cY+75,5,5);
    rect(cX+60,cY+75,5,5);
    rect(cX+65,cY+75,5,5);
    rect(cX+70,cY+75,5,5);
    rect(cX+75,cY+80,5,5);
    rect(cX+80,cY+80,5,5);
    rect(cX+85,cY+85,5,5);
    rect(cX+90,cY+90,5,5);
    rect(cX+90,cY+95,5,5);
    rect(cX+95,cY+100,5,5);
    rect(cX+95,cY+105,5,5);
    rect(cX+95,cY+110,5,5);
    rect(cX+95,cY+115,5,5);
    rect(cX+90,cY+120,5,5);
    rect(cX+85,cY+120,5,5);
    rect(cX+80,cY+120,5,5);
    rect(cX+75,cY+115,5,5);
    rect(cX+70,cY+115,5,5);
    rect(cX+70,cY+120,5,5);
    rect(cX+70,cY+125,5,5);
    rect(cX+65,cY+115,5,5);
    rect(cX+60,cY+115,5,5);
    rect(cX+55,cY+115,5,5);
    rect(cX+55,cY+120,5,5);
    rect(cX+55,cY+125,5,5);
    rect(cX+50,cY+115,5,5);
    rect(cX+45,cY+115,5,5);
    rect(cX+45,cY+120,5,5);
    rect(cX+40,cY+120,5,5);
    rect(cX+35,cY+120,5,5);
    rect(cX+30,cY+115,5,5);
    rect(cX+30,cY+110,5,5);
    rect(cX+30,cY+105,5,5);
    rect(cX+40,cY+125,5,5);
    rect(cX+40,cY+130,5,5);
    rect(cX+45,cY+135,5,5);
    rect(cX+50,cY+140,5,5);
    rect(cX+55,cY+140,5,5);
    rect(cX+60,cY+140,5,5);
    rect(cX+65,cY+140,5,5);
    rect(cX+70,cY+140,5,5);
    rect(cX+75,cY+140,5,5);
    rect(cX+80,cY+135,5,5);
    rect(cX+85,cY+130,5,5);
    rect(cX+85,cY+125,5,5);



   if(b4==true) {  //moving right
      b3 = false;
      b5 = false;
      cX += 2;
    }
    else if(b5==true) { //moving left
      b3 = false;
      b4 = false;
      cX -= 2;
    }

   if( (b4 == true && cX >= 780) || (b5 == true && cX <= -1)) 
   {
      b3 = true;  //moving down
      b4 = false;
      b5 = false;
      //b4=false;
      //b5=false;
    }

   if( b3 == true) //moving down
   {
       cY += 3;
      if (cY % 10 == 0)  //moving down 10 pixels
      {
        b3=false;
        if ( cX >= 780)  //if it is on the right edge
        {
          b4 = false;
          b5 = true;
        }
        else if ( cX <= -1 ) //if it is on the left edge
        {
         b4 = true;
          b5 = false;
          cY += 3;
        }
      }
  }
  }

}
class player {
         float x = 0;
         float y = 0;
         float widthX;
         float widthY;
         float speedX = 3;

         player(float x, float y, float widthX, float widthY) {
         this.x = x;
         this.y = y;
         this.widthX = widthX;
         this.widthY = widthY;
       }
    void hero() {
      stroke(0);
      fill(255);
         rect(x, y-30, 10, 10);
         rect(x-10, y-40, 10, 10);
         rect(x-20, y-30, 10, 10);
         rect(x-30, y-20, 10, 10);
         rect(x+10, y-20, 10, 10);
         rect(x-40, y-10, 10, 10);
         rect(x-20, y-10, 10, 10);
         rect(x-10, y-10, 10, 10);
         rect(x, y-10, 10, 10);
         rect(x+20, y-10, 10, 10);
         rect(x-40, y, 10, 10);
         rect(x-20, y, 10, 10);
         rect(x-10, y, 10, 10);
         rect(x, y, 10, 10);
         rect(x+20, y, 10, 10);
         rect(x-60, y, 10, 10);
         rect(x+40, y, 10, 10);
         rect(x-60, y+10, 10, 10);
         rect(x-50, y+10, 10, 10);
         rect(x-40, y+10, 10, 10);
         rect(x-30, y+10, 10, 10);
         rect(x-10, y+10, 10, 10);
         rect(x+10, y+10, 10, 10);
         rect(x+20, y+10, 10, 10);
         rect(x+30, y+10, 10, 10);
         rect(x+40, y+10, 10, 10);
         rect(x-40, y+20, 10, 10);
         rect(x-30, y+20, 10, 10);
         rect(x-20, y+20, 10, 10);
         rect(x-10, y+20, 10, 10);
         rect(x, y+20, 10, 10);
         rect(x+10, y+20, 10, 10);
         rect(x+20, y+20, 10, 10);
         rect(x+20, y+30, 10, 10);
         rect(x, y+30, 10, 10);
         rect(x-20, y+30, 10, 10);
         rect(x-40, y+30, 10, 10);


if(b1==true) {
  x+=4;
}
if(b1==false) {
   x=x;
}
     if(b2==true) {
   x-=4;
 }
if(b2==false) {
   x=x;
}
     } 
   void right() {
   }
 } 
    void screen1() {  
         PImage img;
         img = loadImage("Pictures/MenuScrn.jpg");
         image(img, 0, 0);
         textFont(font1, 50);
         fill(203, 208, 55);
         text("Space Mushrooms", 70, 100);
         textFont(font2, 40);
         fill(255);
         text("Press SpaceBar to start", 90, 300);
       }
 void screen2() {
         background(0);
         hero1.hero();
         fleet.display2();
       }
Cell[][] grid;

boolean movingDown=false;
boolean movingRight=true;
boolean movingLeft=false;

void setup() {
  size(900, 600);

  int cols = 5;
  int rows = 2;
  grid = new Cell[cols][rows];
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      // Initialize each object
      grid[i][j] = new Cell(i*(width-800), j*200, 20, 20);
    }
  }
}

void draw() {
  background(0);

  for (int i = 0; i < grid.length; i++) {
    for (int j = 0; j < grid[i].length; j++) {
      grid[i][j].display2();
    }
  }
}

class Cell {
  float cX, cY;   

  Cell(float tempX, float tempY, float tempW, float tempH) {
    cX = tempX;
    cY = tempY;
  } 

  void display2() {
    stroke(255, 0, 0);
    fill(255, 0, 0);
    rect(cX+30, cY+100, 5, 5);
    rect(cX+35, cY+95, 5, 5);
    rect(cX+35, cY+90, 5, 5);
    rect(cX+40, cY+85, 5, 5);
    rect(cX+45, cY+80, 5, 5);
    rect(cX+50, cY+80, 5, 5);
    rect(cX+55, cY+75, 5, 5);
    rect(cX+60, cY+75, 5, 5);
    rect(cX+65, cY+75, 5, 5);
    rect(cX+70, cY+75, 5, 5);
    rect(cX+75, cY+80, 5, 5);
    rect(cX+80, cY+80, 5, 5);
    rect(cX+85, cY+85, 5, 5);
    rect(cX+90, cY+90, 5, 5);
    rect(cX+90, cY+95, 5, 5);
    rect(cX+95, cY+100, 5, 5);
    rect(cX+95, cY+105, 5, 5);
    rect(cX+95, cY+110, 5, 5);
    rect(cX+95, cY+115, 5, 5);
    rect(cX+90, cY+120, 5, 5);
    rect(cX+85, cY+120, 5, 5);
    rect(cX+80, cY+120, 5, 5);
    rect(cX+75, cY+115, 5, 5);
    rect(cX+70, cY+115, 5, 5);
    rect(cX+70, cY+120, 5, 5);
    rect(cX+70, cY+125, 5, 5);
    rect(cX+65, cY+115, 5, 5);
    rect(cX+60, cY+115, 5, 5);
    rect(cX+55, cY+115, 5, 5);
    rect(cX+55, cY+120, 5, 5);
    rect(cX+55, cY+125, 5, 5);
    rect(cX+50, cY+115, 5, 5);
    rect(cX+45, cY+115, 5, 5);
    rect(cX+45, cY+120, 5, 5);
    rect(cX+40, cY+120, 5, 5);
    rect(cX+35, cY+120, 5, 5);
    rect(cX+30, cY+115, 5, 5);
    rect(cX+30, cY+110, 5, 5);
    rect(cX+30, cY+105, 5, 5);
    rect(cX+40, cY+125, 5, 5);
    rect(cX+40, cY+130, 5, 5);
    rect(cX+45, cY+135, 5, 5);
    rect(cX+50, cY+140, 5, 5);
    rect(cX+55, cY+140, 5, 5);
    rect(cX+60, cY+140, 5, 5);
    rect(cX+65, cY+140, 5, 5);
    rect(cX+70, cY+140, 5, 5);
    rect(cX+75, cY+140, 5, 5);
    rect(cX+80, cY+135, 5, 5);
    rect(cX+85, cY+130, 5, 5);
    rect(cX+85, cY+125, 5, 5);

    if (movingRight) {  //moving right
      movingDown = false;
      movingLeft = false;
      cX += 2;
    } else if (movingLeft) { //moving left
      movingDown = false;
      movingRight = false;
      cX -= 2;
    }

    if ( (movingRight && cX >= 780) || (movingLeft == true && cX <= -1)) 
    {
      movingDown = true;  //moving down
      movingRight = false;
      movingLeft = false;
    }

    if (movingDown) //moving down
    {
      cY += 3;
      if (cY % 10 == 0)  //moving down 10 pixels
      {
        movingDown=false;
        if ( cX >= 780)  //if it is on the right edge
        {
          movingRight = false;
          movingLeft = true;
        } else if ( cX <= -1 ) //if it is on the left edge
        {
          movingRight = true;
          movingLeft = false;
          cY += 3;
        }
      }
    }
  }
}