2012-11-05 65 views
6

我正在製作一個使用粒子效果進行爆炸的libGDX遊戲。這在新手機上運行得非常好,但在較老的手機上(在HTC Desire上測試),在屏幕fps滯後時間顯着超過一些爆炸時運行良好。爲更慢的手機優化粒子效果

有我目前正在考慮兩種選擇:

  1. 有很多效果每顆粒,從而減少計數可能是一種選擇,但我寧可不要一致性和美觀的原因。

  2. 使用運行粒子效果生成的動畫並保存每個幀。這看起來不錯,而且會一致。圖像大小可能存在問題。我也看不到libGDX粒子實現如何實現。

任何想法?

編輯: 代碼的一些片段: 在資產類加載後的效果:

particleFire.load(Gdx.files.internal("explosion.p"),Gdx.files.internal("")); 

我加載拋射對象的構造粒子效果。我在主渲染循環中做這個對象創建,我知道它是優化的候選者。

   explosion = new ParticleEffect(Assets.particleFire); 

在渲染線程調用此方法繪製的效果。

private void drawBlasts(float delta){ 

    for(Missile projectile : world.missiles){ 
    if (projectile.missileState == State.EXPLODING){ 

     if(projectile.stateTime==0.0f) { 
      projectile.explosion.start(); 
      continue; 
     } 

     projectile.explosion.setPosition(projectile.position.x, projectile.position.y); 
     projectile.explosion.draw(spriteBatcher, delta); 


    } 
    } 

} 

explosion.p

- Delay - 
active: false 
- Duration - 
lowMin: 1000.0 
lowMax: 1000.0 
- Count - 
min: 0 
max: 100 
- Emission - 
lowMin: 0.0 
lowMax: 0.0 
highMin: 250.0 
highMax: 250.0 
relative: false 
scalingCount: 1 
scaling0: 1.0 
timelineCount: 1 
timeline0: 0.0 
- Life - 
lowMin: 800.0 
lowMax: 800.0 
highMin: 1000.0 
highMax: 1000.0 
relative: false 
scalingCount: 3 
scaling0: 1.0 
scaling1: 1.0 
scaling2: 1.0 
timelineCount: 3 
timeline0: 0.0 
timeline1: 0.66 
timeline2: 0.9931507 

EDIT 2的一個片段:這些影響是累加所以勾兌過正在進行的好一點。

回答

3

看着你的兩個想法,他們都會工作。 第一個可以通過使粒子稍大並使用更少的粒子來解決。隨着每個粒子動態移動,手機必須處理的粒子越少,因此每幀的許多計算都會打勾。因爲沒有/很少的處理時間(簡單地計算它通過「爆炸」的距離並選擇適當的框架),但是我覺得你的第二個選擇會更好,但是也存在着所有爆炸的折衷看起來非常相似,如果你可以發佈一些你的代碼(你使用了多少粒子,爆炸發生的頻率,大概有多少次爆炸同時發生),這會有幫助。用更簡單的粒子效果,我解決它通過只繪製一個粒子效果,它無處不在,移動到它被顯示的每個幀

編輯1: 好了,所以我覺得ÿ你正在尋找的是一個粒子效應池。您基本上會事先分配一定數量的粒子效果,而不是像我認爲的那樣根據需要創建它們。通過重用固定池中的對象,而不是單獨分配和釋放它們,可以節省大量內存和處理空間。我嘗試了我相信你在我的Desire HD上所做的一切,並且一次在屏幕上獲得了大約22 fps的12,1秒100奇怪粒子效果。然後將它們集中起來,我得到了大約25.這不是很好,但每一點都有幫助。同時將粒子數量減少到75%並不是那麼明顯,併爲您節省了大量的幀!

Particle Effect Pool Libgdx JavaDoc

很抱歉我不能幫助更多!

+0

我已經更新了OP。我知道對象創建有一些明顯的優化,但我不認爲它們是問題。三星Galaxy S的屏幕效果在8或9時幀頻開始成爲問題。在HTC Desire上約爲5。 – barconr

+0

我已經更新了我的OP – LiamJPeters