我正在做一个游戏,基本上,您将进入的小行星避开作为太空船(这是针对大学一年级的项目)。

但是我有一个问题,我从一个类(小行星)中调用了6个对象,它们是通过数组调用的。我需要能够在类之外使用它们的x和y位置,以便检测用户控制的精灵是否已与一个碰撞。

每当我尝试在类之外引用小行星的x或y位置时,都会出现错误“无法静态引用非静态场障碍。posx”。

下面是我的代码的MCVE。它调用对象,它们在屏幕上向下移动。我现在已经删除了用户控制的精灵和图像,因为我所需要知道的是如何引用类外部的对象位置。

*我添加了一些更改,以显示我要实现的目标

obstacle [] asteroid;
int x;
int y = 400;
int velocity = 10;

void setup ()
{
  size (700, 500);

  asteroid = new obstacle[6];
  for (int i = 0; i < asteroid.length; i++) {
    asteroid[i] = new obstacle();
  }
}

void draw () {
  background(0);
  collision();
  rect (x,y,30,30);

  for (int i = 0; i < asteroid.length; i++) {
    asteroid[i].display();
    asteroid[i].move();
  }
}

void keyPressed () {
  if (key == CODED) {

    if (keyCode == RIGHT) {
      x += velocity;
    }

    if (keyCode == LEFT) {
      x -= velocity;
    }
  }
}

void collision () {
  if (x == obstacle.posx && y == obstacle.posy) {
    println("Hit");
  }
}


class obstacle {


  int velocity = 6;
  int posx;
  int posy = height;



  void display () {
    rect (posx, posy, 50, 50);
  }

  void move() {
    posy += velocity;
    if (posy >= height) {
      posy = (int(random(-500, -50)));
      posx = (int(random(20, 650)));
    }
  }
}

最佳答案

回复:您的最后一条评论,就是您的问题。您不能引用obstacle.posx,因为obstacle是类类型,并且posx不是静态的。您可以将其移动到for循环中并执行System.out.println(asteroids[i].posx)(假设posx在此处可见(即是公开的))。

09-06 20:36