2011-11-25 84 views
1

我有這種創建方法,每秒鐘都會在我的andengine場景中添加一個精靈。如何更改AndEngine中的TimerHandler延遲?

private void createSpriteSpawnTimeHandler(){ 
     TimerHandler spriteTimerHandler; 
     float mEffectSpawnDelay = 1f; 
     spriteTimerHandler = new TimerHandler(mEffectSpawnDelay,true,new ITimerCallback(){ 
     @Override 
     public void onTimePassed(TimerHandler pTimerHandler) { 
       addFace(); 
     } 
     }); 
     getEngine().registerUpdateHandler(spriteTimerHandler); 
} 

我想要做的是什麼,例如

if(x <= b){ 

mEffectSpawnDelay = mEffectSpawnDely - .2f; 
} 

我遇到的問題是,當變量發生變化。我無法找到更新TimeHandler的方法,讓它知道更改mEffectSpawnDelay變量。

有什麼建議嗎?

+0

你不能做到這一點,你想要的方式。你需要的是告訴TimerHandler spawn延遲改變的一種方式。您必須查看API是否存在可以執行此操作的方法。 –

回答

11

我剛剛爲您創建了this class。我認爲它應該可以工作,並且可以根據需要更改滴答之間的時間間隔。 (沒有測試它,所以你可能需要做一些小的修補程序,但它看起來不錯IMO。)

使用這種方式:

Timer timer = new Timer(interval, new Timer.ITimerCallback() { 
    public void onTick() { 
     //Your code to execute each interval. 
    } 
} 
(Engine object here).registerUpdateHandler(timer); 

如果你想改變的時間間隔,應該保持對定時器的引用。不管怎麼說,改間歇使用:

timer.setInterval(newInterval); 
+0

Nicee ...你可以在關於如何實現這個與我想要做的答案的編輯?非常感謝,真棒。 –

+0

kk現在編輯指示。 – Jong

+0

太好了!非常感謝jong! –

3

將處理程序存儲在實例變量中,並在需要時調用其setTimerSeconds方法。

+0

你能給一個代碼示例嗎? –

+0

TimeHandler上沒有setTimerSeconds方法。 – C0deAttack

+0

這裏有一個:http://code.google.com/p/andengine/source/browse/src/org/anddev/andengine/engine/handler/timer/TimerHandler.java?spec=svn122487e74fa1fdad6cb79d4cbc9e22faf7b6f6ca&r=122487e74fa1fdad6cb79d4cbc9e22faf7b6f6ca。 –

1

望着TimerHandler源文件在這裏:http://code.google.com/p/andengine/source/browse/src/org/anddev/andengine/entity/handler/timer/TimerHandler.java?r=30ba07312ed7d4636077b835ba15f772e3f30db7

你會看到,沒有更新的時間間隔的方法。變量mTimerSeconds也是最終的。

我會實現我自己的IUpdateHandler類,並添加非最終mTimerSeconds和一個方法來更新它。

您可以複製現有的TimerHandler,然後相應地進行更改。

0

覆蓋onCreateEngine法新FixedStepEngine

@Override 
public Engine onCreateEngine(EngineOptions pEngineOptions) { 

    return new FixedStepEngine(pEngineOptions, 30); 
}