我有一个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)时,我是否应该分离并接听新行?
答案 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来计算差异。 (例如,将距离乘以经过时间与指定时间的方差)。