ポリライン縮小の簡単なアニメーションを完成させようとしています。加速度計の X 値にアクセスし、それをポイントの配列/リストに追加してから、それらすべてのポイントの x 座標を更新しています。ここに図があります:
たとえば、私の SCREEN_WIDTH が 800 px だとしましょう。
ステップ 1:新しい点 A = (0, 9.43634) を追加します。少なくとも 2 つの点が必要なため、何も描画されません。
points[(0, 9.43634)];
ステップ 2:別の点 B = (0, 7.23134) を追加します。新しい X 値を再計算し、それらの点を使用してポリラインを描画します。
points[(0, 9.43634), (800, 7.23134)];
ステップ 3:さらに別のポイント C = (0, 8.251251) を追加します。X 値を再計算し、それらの点を使用してポリラインを描画します。
points[(0, 9.43634), (400, 7.23134), (800, 8.251251)];
ステップ 4: ...
私の問題は、アニメーションが流動的でないことです。追加するポイントの最大数を ~100 に設定すると、フレームがスキップされるようです。単一のポイントを追加した後ではなく、いくつかのポイントを追加した後にアニメーションが更新されたように見えます。
ArrayList の代わりに配列を使用してガベージ コレクションを回避しようとしたり、アニメーションの速度を制限したりしましたが、何も機能しません。
新しい x 値を計算し、100 以上のポイントを使用してポリラインを描画すると、速度が低下しますか? 隣接するポイント間に線を引いてみましたが、パフォーマンスは同じでした。
重要な場合は、Samsung Galaxy S2 でテストしています。
残念ながら、ここにどのように見えるかのアニメーションを投稿することはできませんが、ここにすべての必要なコードがあります:
Accelerometer-test プロジェクトの Accelerometer_Test.java:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gurniak.accelerometer.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:allowBackup="true" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Accelerometer-test-android プロジェクトの MainActivity.java:
package com.gurniak.accelerometer.test;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import android.util.Log;
public class MainActivity extends AndroidApplication {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
cfg.useAccelerometer = true;
cfg.useCompass = false;
cfg.useWakelock = true;
initialize(new Accelerometer_Test(), cfg);
}
}
私の質問は、どうすればアニメーションを高速化し、より滑らかにすることができますか? 私はそれを速く更新したい(各〜20 [ミリ秒]が完璧です)そしてすべてのポイントがに追加された後pointsX
. 私はここで非常に愚かなことをしていますか?GC_CONCURRENT FREED
制限に達した後に新しいポイントが追加されていないにもかかわらず、logcat に繰り返し表示されMAX_NUM_POINTS
ます。最後に、新しい x 値を再計算することが実際にパフォーマンスに悪い場合、それをより速く再計算するアルゴリズムはありますか?