2D游戏,随机创建对象

时间:2016-01-18 17:49:06

标签: java android libgdx

我一直在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;
        }

    }

所以,碰撞工作正常,但问题是有时候(好吧,也许很多次)我的流星重叠......我该怎么办才会有其他的流星?

1 个答案:

答案 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。 希望有所帮助!

相关问题