【问题标题】:onManagedUpdate never changes pSecondsElapsed - AndEngineonManagedUpdate 永远不会改变 pSecondsElapsed - AndEngine
【发布时间】:2013-11-07 23:22:13
【问题描述】:

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

【问题讨论】:

  • 该变量是自上次滴答以来的时间,因此它应该是恒定的。但 onManagedUpdate 是按滴答声调用的,因此您的代码仍应按需要工作。
  • @kabuto178 不能递增吗?
  • 你应该做类似 -> int sec = 0;秒+=pSecondsElapsed;并使用此“秒”而不是 pSecondsElapsed。
  • 正如 Shaq 建议的那样,您可以创建一个字段变量作为计数器,但是您在 OnManagedUpdate() 中使用的任何代码都将根据需要在每个滴答时执行。

标签: android andengine sprite


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多