onManagedUpdate从不更改pSecondsElapsed - AndEngine

时间:2013-11-07 23:22:13

标签: android andengine sprite

我有一个Sprite,它是一个球,它正在正常下降,根据我的FixedStepPhysicsWorld选项。但我想要一个矢量跟随这个球,因为它正在下降。 所以我决定覆盖onManagedUpdate sprite的方法。

经过大量测试后,我得到了1个矢量绘图,然后我意识到pSecondsElapsed没有增加。

这是我的代码:

@Override
public void onPopulateScene(Scene pScene,
        OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {

         sPlayer= new Sprite(200,0, playerTextureRegion, this.mEngine.getVertexBufferObjectManager()){

         @Override
         protected void onManagedUpdate(float pSecondsElapsed) {
             super.onManagedUpdate(pSecondsElapsed);
             Log.d("<<<<<<<<<<<,>>>>>>>>>"+pSecondsElapsed+","");
         }

输出如下:

11-07 21:14:32.242: D/<<<<<<<<<<<,>>>>>>>>0.02 (23720): [MainActivity.java:359:onManagedUpdate()] 
11-07 21:14:32.257: D/<<<<<<<<<<<,>>>>>>>>0.02 (23720): [MainActivity.java:359:onManagedUpdate()] 
11-07 21:14:32.281: D/<<<<<<<<<<<,>>>>>>>>0.02 (23720): [MainActivity.java:359:onManagedUpdate()] 

我的引擎就像:

  @Override
public Engine onCreateEngine(final EngineOptions pEngineOptions) {
return new FixedStepEngine(pEngineOptions, 50);
}

问题: 1 - 为什么pSecondsElapsed没有改变? 2 - 我想为这个球的每个位置画出矢量。每次调用此方法(onManagedUpdate)时,我是否应该分离并接听新行?

2 个答案:

答案 0 :(得分:0)

API试图通过称之为“Seconds Elapsed”来表明这一点,这意味着自上次调用更新以来“秒过去”。它不是累积数,而是自上次调用函数以来的毫秒数。

如果要保持累积计数,则需要在每次调用该函数时将pSecondsElapsed添加到计数器变量。

答案 1 :(得分:0)

pSecondsElapsed未更改的原因是由于两个条件为真。 1)您正在使用FixedStepOption,帧速率设置为50。 2)你测试它的android有能力以每秒50帧的速度运行。

这导致它运行50 FPS,这导致每帧经过0.02秒。 (1秒除以50帧)。您可以通过将50更改为25来测试,并期望得到.04(1秒除以25帧)。

重要的是硬件是否不支持您指定的帧速率。在这种情况下,由于需要在应用程序的某些情况下执行更多工作,因此可能会有所不同。 (例如,如果您创建爆炸,FPS可能会因额外的精灵而下降。)

要正确支持无法跟上指定帧率的硬件,可以使用pSecondsElapsed来计算差异。 (例如,将距离乘以经过时间与指定时间的方差)。