Class 如何从场景中的另一个类调用变量和函数?

Class 如何从场景中的另一个类调用变量和函数?,class,variables,processing,Class,Variables,Processing,我正在制作一个小的原型游戏,它使用扩展类(不确定这叫什么),我正在尝试检测玩家和地面块之间的碰撞。我的问题是,处理过程表明“player”不能解析为变量。因此,我不能使用Player类中的任何变量来检测任何类型的冲突 如果你有任何问题需要回答以帮助我,我会很乐意回答 这是游戏场景课 public class PlayScene extends GameScene { public WorldBlocks blocks; public Player player; public Pl

我正在制作一个小的原型游戏,它使用扩展类(不确定这叫什么),我正在尝试检测玩家和地面块之间的碰撞。我的问题是,处理过程表明“player”不能解析为变量。因此,我不能使用Player类中的任何变量来检测任何类型的冲突

如果你有任何问题需要回答以帮助我,我会很乐意回答

这是游戏场景课

public class PlayScene extends GameScene {
  public WorldBlocks blocks;
  public Player player;

  public PlayScene() {
    blocks = new WorldBlocks();
    player = new Player();
  }

  public void Update() {
    if (!blocks.levelLoaded) {
      blocks.spawnGroundBlocks();
      player.spawnPlayer();
    }
    blocks.updateGroundBlocks();
  }

  public void Draw() {
    background(255);
    blocks.drawGroundBlocks();
  }
}
这是玩家级

class Player {
  public float x, y, xVelocity, yVelocity, playerSize;
  public boolean groundCollision;

  void spawnPlayer() {
    x = width/25;
    y = height - height/3;
    xVelocity = 0;
    yVelocity = 0;
    playerSize = width/35;
  }

  void updatePlayer() {

  }
}
这是WorldBlocks类(问题是分开的)

if(x[i]<-块大小/2){
x[i]+=宽度+块大小;
}
如果(x[i]>宽度+块大小/2){
x[i]=宽度+块大小;
}
}
}
空心砌块(){
对于(int i=0;i<块的数量;i++){
填充(块颜色[i]);
正方形(x[i],y[i],块大小);
}
}
}

扩展类被恰当地称为继承


在代码中:

  • playsecene
    类的实例每个都有一个
    Player

  • Player
    未在
    WorldBlocks
    类中定义

因此,当您在
WorldBlocks
类中引用一个播放器实例(带有
player.y
和类似内容)时,将找不到任何东西。这就是“player”的处理意味着无法解析为变量-它无法在
WorldBlocks
类的范围内找到
player
对象


要在
WorldBlocks
类中对播放器调用方法,它需要对
player
实例的引用

提供此参考的一种方法是通过构造函数;修改
WorldBlocks
类,如下所示:

class WorldBlocks {

    private player;

    public WorldBlocks(Player player) {
           this.player = player;
    }
}
修改
playsecene
构造函数,如下所示:

public PlayScene() {
    player = new Player();
    blocks = new WorldBlocks(player);
}

现在,当您在
WorldBlocks
类的碰撞循环中引用播放器(
player.y
)时,它知道要引用什么——它将调用属于该
WorldBlocks
实例的
private player
对象

      if (x[i] < - BLOCK_SIZE/2) {
        x[i] += width + BLOCK_SIZE;
      }
      if (x[i] > width + BLOCK_SIZE/2) {
        x[i] -= width + BLOCK_SIZE;
      }
    }
  }

  void drawGroundBlocks() {
    for (int i = 0; i < NUMBER_OF_BLOCKS; i++) {
      fill(blockColor[i]);
      square(x[i], y[i], BLOCK_SIZE);
    }
  }
}
class WorldBlocks {

    private player;

    public WorldBlocks(Player player) {
           this.player = player;
    }
}
public PlayScene() {
    player = new Player();
    blocks = new WorldBlocks(player);
}