我一直在libgdx上玩游戏一段时间..我的项目包括太空飞船和一些流星。
这是我制作的课程
public class asteroid {
public static final int var=1080-150;
private Sprite sprite_asteroid;
private int posAsteroidx,posAsteroidy;
Rectangle asteroidBounds=new Rectangle();
private Random rand;
public asteroid(){
sprite_asteroid=new Sprite(new Texture(Gdx.files.internal("asteroid.png")));
rand = new Random();
posAsteroidx=rand.nextInt(var);
posAsteroidy=1920+rand.nextInt(1920);
asteroidBounds.set(posAsteroidx,posAsteroidy,150,150);
}
public void reposition(){
posAsteroidy-=10;
}
在游戏屏幕中,我创建了一个数组private Array<asteroid> asteroids;
并添加了一些for (int i=1;i<=asteroidCount;i++)
asteroids.add(new asteroid());
在游戏屏幕的某处,我检查与船的碰撞
for (asteroid asteroid : asteroids) {
if (asteroid.asteroidBounds.overlaps(shipbounds))
{
asteroid.setPosAsteroidx(rand.nextInt(1080-150));
asteroid.setPosAsteroidy(1920 + rand.nextInt(1920));
shipLives--;
break;
}
}
所以,碰撞工作正常,但问题是有时候(好吧,也许很多次)我的流星重叠......我该怎么办才会有其他的流星?
答案 0 :(得分:1)
防止重叠的最佳方法与检查船舶碰撞的方式类似。您需要遍历小行星并将其与其他小行星进行比较,看看它们是否重叠。
尝试这样的事情:
for (int i = 0; i < asteroids.size() - 1; i++) {
for (int j = i + 1; j < asteroids.size(); j++) {
if (asteroids[i].asteroidBounds.overlaps(asteroids[j].asteroidBounds))
//Insert collision handling code here
}
}
您必须稍微修改if语句。我不确定我是否正确使用了overlaps
功能或astroidBounds
。
希望有所帮助!