Я собираю игру, для которой у меня была идея в обработке, и я сначала пытаюсь исправить фон.
Я создал массив облачных объектов, которые движутся в фоновом режиме, и я хочу иметь возможность их регенерировать, когда они выходят за пределы экрана.
Каждое облако состоит из серии окружностей, каждая из которых имеет собственную позицию x и смещение по оси y. Они могут перемещаться по экрану ОК; проблема возникает при создании кода для их регенерации. Я попытался создать оператор if, чтобы проверить позицию x последнего круга в серии.
/////////////MAIN SETUP////////////////
PVector screenSize;
PVector windowPosition;
PVector windowSize;
void setup() {
size(1400,900,P3D);
smooth();
screenSize = new PVector(width, height);
windowPosition = new PVector(0,0);
frameRate(60);
loadEnvironment();
}
void draw() {
background(134,224,255);
drawEnvironment();
}
///////////////FOR THE CLOUD SETUP/////////////////
int cloudNumber;
Cloud[] totalclouds;
void loadEnvironment()
{
cloudNumber = round(random(5,25));
totalclouds = new Cloud[cloudNumber];
for(int i = 0; i<cloudNumber; i++)
{
totalclouds[i] = new Cloud();
}
};
///////////////////////////////////////
void drawEnvironment()
{
for(int i = 0; i<cloudNumber; i++)
{
totalclouds[i].update();
}
};
/////////////////////////////////////////
class Cloud
{
float xPos;
float yPos;
float yTop;
float yBottom;
float xVelocityMin;
float xVelocityMax;
float xVelocity;
float screenStart = 0;
float screenEnd = width;
int cloudSize = round(random(1,4));
float[] xPosition = new float[cloudSize];
float[] yPositionOffset = new float[cloudSize];
float[] xDiam = new float[cloudSize];
float[] yDiam = new float[cloudSize];
float xDiameter = random(40,50);
float yDiameter = random(40,50);
float yOffset = random(10,20);
float overlap = xDiameter/5;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Cloud (){
xPos = random(width);
yPos = random(windowPosition.y, 350);
xPosition[0] = xPos;
if (xPosition.length>1)
for(int i = 1; i<cloudSize; i++)
{
xPosition[i] = xPosition[i-1] + (xDiameter/2) + overlap;
}
for (int i = 0; i<cloudSize; i++)
{
yPositionOffset[i] = yOffset;
}
xVelocityMin = 0.3;
xVelocityMax = 0.6;
xVelocity = random(xVelocityMin, xVelocityMax);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void move() {
for(int i = 0; i<cloudSize; i++)
{
xPosition[i] += xVelocity;
}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void createNewClouds() {
int lastItem = xPosition.length - 1;
if (xPosition[lastItem]>screenEnd);
{
xPosition[0] = screenStart;
if (xPosition.length>1)
for(int i = 1; i<cloudSize; i++)
{
xPosition[i] = xPosition[i-1] + (xDiameter/2) + overlap;
}
for (int i = 0; i<cloudSize; i++)
{
yPositionOffset[i] = yOffset;
}
xVelocityMin = 0.3;
xVelocityMax = 0.6;
xVelocity = random(xVelocityMin, xVelocityMax);
}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void display() {
for(int i = 0; i<cloudSize; i++)
{
ellipseMode(CENTER);
fill(255, 255, 255);
noStroke();
ellipse(xPosition[i], yPos + yPositionOffset[i], xDiameter, yDiameter);
}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void update() {
move();
display();
createNewClouds();
}
}
Без кода регенерации работает нормально - облака движутся как положено. С помощью кода облака имеют начальную позицию x=0
. Почему это так, если есть оператор if? И почему они не двигаются?