Java 有没有办法重新生成在屏幕上移动的云?
我正在制作一个我在处理中有想法的游戏,我正在尝试首先修复背景 我已经创建了一个在背景中移动的云对象数组,我希望能够在它们离开屏幕时重新生成它们 每个云由一系列圆组成,每个圆都有自己的x位置和y偏移。他们可以在屏幕上移动OK;在创建代码以重新生成它们时会出现问题。我试图创建一个if语句来检查序列中最后一个圆的x位置Java 有没有办法重新生成在屏幕上移动的云?,java,graphics,processing,Java,Graphics,Processing,我正在制作一个我在处理中有想法的游戏,我正在尝试首先修复背景 我已经创建了一个在背景中移动的云对象数组,我希望能够在它们离开屏幕时重新生成它们 每个云由一系列圆组成,每个圆都有自己的x位置和y偏移。他们可以在屏幕上移动OK;在创建代码以重新生成它们时会出现问题。我试图创建一个if语句来检查序列中最后一个圆的x位置 /////////////MAIN SETUP//////////////// PVector screenSize; PVector windowPosition; PVector
/////////////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();
}
}
///MAIN设置////////////////
PVector屏幕大小;
PVector窗口位置;
PVector窗口大小;
无效设置(){
尺寸(1400900,P3D);
光滑的();
屏幕尺寸=新的PVector(宽度、高度);
windowPosition=新的PVector(0,0);
帧率(60);
loadEnvironment();
}
作废提款(){
背景(134224255);
抽屉环境();
}
///////////////对于云设置/////////////////
整数云数;
云[]总云;
void loadEnvironment()
{
云数=圆形(随机(5,25));
totalclouds=新云[cloudNumber];
对于(int i=0;iA“概念”思想是将“虚拟”容器中的所有元素分组。容器的每个子元素相对于容器本身偏移(即0x0
是容器的左上角),然后移动“容器”本身。在渲染云时,将偏移图形上下文(翻译)通过容器位置,然后渲染子对象。从技术上讲,子对象从不移动,只有容器才移动。为什么Cloud
类包含一个位置数组?每个位置代表什么?位置数组用于云中的额外圆圈,以构建整件事。我已经看到了移动的想法e容器,但我认为我应该尝试以这种方式工作。由于这种方式被证明有点棘手,我可能会同意容器的想法。“概念”想法是将所有元素分组在一个“虚拟”容器中。容器的每个子元素相对于容器本身是偏移的(即0x0
是容器的左上角),然后移动“容器”本身。在渲染云时,将偏移图形上下文(即平移它)通过容器位置,然后渲染子对象。从技术上讲,子对象从不移动,只有容器才移动。为什么Cloud
类包含一个位置数组?每个位置代表什么?位置数组用于云中的额外圆圈,以构建整件事。我已经看到了移动的想法e容器,但我想我应该试着让它以这种方式工作。由于这种方式被证明有点棘手,我可能会同意容器的想法。