0

ボールであるスプライトがあり、FixedStepPhysicsWorld オプションに従って適切に落下しています。しかし、落下中のこのボールにベクトルを追従させたいと思います。そこで、onManagedUpdate スプライトのメソッドをオーバーライドすることにしました。

多くのテストの後、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) が呼び出されるたびに、新しい Line をデタッチしてアタッチする必要がありますか?

4

2 に答える 2

0

pSecondsElapsed が変化しない理由は、2 つの条件が真であるためです。1) フレーム レートを 50 に設定して FixedStepOption を使用しています。2) テストした Android には、毎秒 50 フレームで実行する機能がありました。

これにより、50 FPS が実行され、フレームごとに 0.02 秒が経過します。(1 秒を 50 フレームで割った値)。50 を 25 に変更してこれをテストすると、.04 (1 秒を 25 フレームで割った値) になることが期待できます。

重要になるのは、指定したフレーム レートをハードウェアがサポートできない場合です。この場合、アプリの特定の状況でより多くの作業を行う必要があるため、変動する可能性があります。(たとえば、爆発を作成すると、余分なスプライトが原因で FPS が低下する可能性があります)。

指定したフレームレートに対応できないハードウェアを適切にサポートするには、pSecondsElapsed を使用して差異を考慮することができます。(たとえば、距離に経過時間と指定された時間の分散を乗算することによって)。

于 2014-09-15T05:07:24.257 に答える