我是游戏的开头我正在创建一个由星形物体组成的背景
bg = new Background();
我的背景课程如下:
public class Background {
public ArrayList<Star> starList;
private Star star;
public Background(int level) {
star = new Star();
star.populateStarList(level);
}
public class Star{
private boolean stillSearching = true;
boolean clash = false;
public Vector2 starPositionVector;
public Star() {
//loop through the starList to find valid x,y coordinates
while (stillSearching){
float x = 0 + (int)(Math.random() * ((GamePanel.WIDTH - 0) + 1));
float y = 0 + (int)(Math.random() * ((GamePanel.HEIGHT - 0) + 1));
starPositionVector = new Vector2(x,y);
for (int u = 0; u < starList.size(); u++){
Star starCollision = starList.get(u);
//check distance
if (starPositionVector.dstSqr(starCollision.starPositionVector) < 5){
clash = true;
break;
}
}
if (clash == false){
stillSearching = false;
}
}
}
public void populateStarList(int level){
if(starList==null) {
starList = new ArrayList<Star>();
}
for (int i = 0; i < 10; i++){
Star star = new Star();
starList.add(star);
}
}
}
}
这个想法是populateStarList将用星形对象填充数组。但是,我不能在没有实例化星级的情况下调用populateStarlist。这是一个问题,因为在
中使用了starList数组public class Star
并且在调用populateStarlist之前为零。
我不确定这是不是我不了解如何使用静态方法,或者我是否做了一些糟糕的设计选择。
ps:如果有一种更有效的方法来测试有效的x,y坐标而不是我的while / for循环,我很乐意知道。