0

我有一个 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)时,我是否应该分离并附加一个新行?

4

2 回答 2

0

API 试图通过将其称为“经过的秒数”来说明这一点,这意味着自上次调用更新以来“经过的秒数”。它不是累积数字,而是自上次调用函数以来的毫秒数。

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

于 2013-11-08T22:57:48.397 回答
0

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

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

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

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

于 2014-09-15T05:07:24.257 回答