Я делаю небольшую игру-прототип, в которой используются расширяющиеся классы (не знаю, как это называется), и я пытаюсь обнаружить столкновение между игроком и наземными блоками. Моя проблема в том, что обработка говорит, что «player» не может быть преобразован в переменную. Из-за этого я не могу использовать какую-либо переменную из класса Player для обнаружения какого-либо столкновения.
Если у вас есть вопросы, на которые вам нужно ответить, чтобы помочь мне, я с удовольствием на них отвечу.
Это класс PlayScene
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 (проблема разделена)
class WorldBlocks {
private final int NUMBER_OF_BLOCKS = 100;
private boolean levelLoaded = false;
private float spawnPosX;
private float spawnPosY;
public final float BLOCK_SIZE = width/30;
public float []x = new float[NUMBER_OF_BLOCKS];
public float []y = new float[NUMBER_OF_BLOCKS];
private float []blockColor = new float[NUMBER_OF_BLOCKS];
void spawnGroundBlocks() {
spawnPosX = -(BLOCK_SIZE/2);
spawnPosY = height - 1.5 * BLOCK_SIZE;
for (int i = 0; i < NUMBER_OF_BLOCKS; i++) {
if (spawnPosX < width + BLOCK_SIZE/2 && spawnPosY < height) {
x[i] = spawnPosX;
y[i] = spawnPosY;
blockColor[i] = random(100, 155);
spawnPosX += BLOCK_SIZE;
if (spawnPosX > width && spawnPosY < height - BLOCK_SIZE/2) {
spawnPosX = -BLOCK_SIZE/2;
spawnPosY = height - BLOCK_SIZE/2;
}
} else {
spawnPosX = 0;
spawnPosY = -height;
blockColor[i] = random(200, 255);
}
}
levelLoaded = true;
}
void updateGroundBlocks() {
for (int i = 0; i < NUMBER_OF_BLOCKS; i++) {
if (player.y + player.playerSize/2 > y[i] - BLOCK_SIZE/2) { //This is the problem statement
collision = true;
}
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);
}
}
}