从 ArrayList 生成敌人

Spawning Enemies From ArrayList

我在 ArrayList 中有 12 个敌人,我想为每个敌人延迟 batch.draw。我在 render 方法中尝试了以下代码,但它只会使精灵闪烁。我正在使用 libgdx。请帮忙;(

for (int i = 0; i < list.size(); i++)
{
    fireDelay -= Gdx.graphics.getDeltaTime();
    if (fireDelay <= 0)
    {
        batch.draw(list.get(i)//..etc)                    
        fireDelay += 0.2;
    }
}

请记住,在游戏中,您的 render 方法会将所有绘图命令排队。然后他们被吸引到屏幕上。然后在下一次调用 render() 时,它会清除屏幕并重新开始。您的代码有许多没有意义的问题,例如在 for 循环中倒计时增量时间。

有一百万种方法可以做到这一点。这是一个简单的。它所做的是在每次调用 render() 时更新经过的时间并使用它来重新计算现在应该显示的项目数。然后 for 循环将它们全部绘制到该数字。

private static final float APPEARANCE_RATE = 5f; // 5 per second
private float elapsedTime = 0;

// in render():

elapsedTime += Gdx.graphics.getDeltaTime();

int itemCount = Math.min(list.size(), (int)(elapsedTime * APPEARANCE_RATE));
for (int i = 0; i < itemCount; i++)
{
    batch.draw(list.get(i), /*..etc*/);
}

下面的代码一定可以工作:

boolean spawnTime=0;

void spawnEnemy(){
  Rectangle rect = new Rectangle();
  rect.x = Gdx.graphics.getWidth()/2;
  rect.y = Gdx.graphics.getHeight();
  rect.setSize(50,50);
  myList.add(rect);
}

spawnTime+=Gdx.graphics.getDeltaTime();

//call spawnEnemy function every second
if(spawnTime>=1){
  spawnEnemy();
  spawnTime=0;
}

//draw all the rectangles to the batch you added in the list
for(Rectangle rect: myList){
  batch.draw(rect,rect.x,rect.y,rect.w,rect.h);
}

注意:全局声明spawnTime。

您可以尝试我使用 ModelBatch 编写的这段代码,但该方法也适用于 spriteBatch。

private int idx = 1;
private float elapsedTime = 0;
private int everySec = 1;
private Array<ModelInstance> storedInstance = new Array<>(); //extra array added each model every second to render in model batch.

并且在 render( ) 方法中

modelBatch.begin(cam);
elapsedTime += Gdx.graphics.getDeltaTime();

int time = (int) Math.floor(elapsedTime);

if (idx <= instance.size) {

if (time == idx * everySec) {
     storedInstance.add(instance.get(idx - 1));
     idx++;
    }
}
modelBatch.render(storedInstance);
modelBatch.end();

idx 分别检查是否每秒钟都渲染了所有模型。如果你想改变模型出现的时间跨度,你应该将 "everySec" 更改为例如 5 延迟 5 秒。另外 "instance" 是我要渲染的模型列表(在你的例子中,是敌人)。