代码相对自我解释。我正在做一个小动作游戏。游戏在屏幕上呈现Poolable blob敌人,它们渲染得很好,攻击我的玩家,在经过一定量的点击后死亡。出于某种原因,取消注释“updateEffects()”方法会导致blob敌人在被击中一次后停止渲染。
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// TODO Auto-generated method stub
tilesRavis.setView(cam);
tilesRavis.render();
sbatch = (SpriteBatch) tilesRavis.getBatch();
sbatch.begin();
playerbar.update(world.getp1().currentHP, world.getp1().maxHP);
manabar.update(world.getp1().currentMP, world.getp1().maxMP);
drawBars();
sbatch.end();
drawNewPlayer(world.getp1());
// updateEffects();
drawDemBlobs();
cam.position.set(world.getp1().getPosition().x, world.getp1().getPosition().y, 0);
cam.update();
guicam.update();
}
//carries out animation
private void drawBlob(Blob blob){
TextureRegion temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
switch (blob.getBlobState()){
case Patrol:
temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
break;
case Pursue:
temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
break;
case AtkDraw:
temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
break;
case AtkWindow:
temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
break;
case AtkRecovery:
temp2 = GameAssets.gooSprite.move.getKeyFrame(blob.getEnemyTime(), true);
break;
}
Batch batch = tilesRavis.getBatch();
batch.begin();
batch.draw(temp2, blob.getPosition().x, blob.getPosition().y, 1, 1);
batch.end();
}
public void drawDemBlobs(){
for(int i = 0; i < world.getaBlob().size; i++){
Blob blob = world.getaBlob().get(i);
drawBlob(blob);
if(blob.isEffectHit()){
spawnEffect(blob.getPosition(), GameAssets.gooHit, 1, 500); //create effect
blob.setEffectHit(false);
}
}
}
private void updateEffects(){
for(int b = 0; b < effectArray.size; b++){
Effect effect = effectArray.get(b);
if(effect.getLife().hasCompleted()){
effectArray.removeIndex(b);
effectPool.free(effect);
}
}
}
public void drawEffect(Effect effect){
TextureRegion temp = new TextureRegion();
temp = effect.animation.getKeyFrame(effect.getStateTime(), false);
Batch batch = tilesRavis.getBatch();
batch.begin();
batch.draw(temp, effect.getPosition().x, effect.getPosition().y, effect.size, effect.size);
batch.end();
}
public void spawnEffect(Vector2 position, Animation animation, float size, long life){
Effect effect = effectPool.obtain();
effect.init(position, animation, size, life);
effectArray.add(effect);
}
绘制效果(一点blob血溅)似乎没有,呃,影响blob是否停止渲染。
答案 0 :(得分:0)
从头开始遍历数组时调用removeIndex(b),这会导致不好的事情发生。
将updateEffects方法中的for循环更改为以下内容:
for(int b = effectArray.size - 1; b >= 0; b--){
// stuff
}