3

Android で openGL 2D を使用してゲームを開発しています。

私のビューは複雑で、同時に 300 ~ 400 個のオブジェクトが含まれているため (ゲーム ループ)、パフォーマンス レベルを上げることは非常に困難です。

static私はJavaのとnon-staticフィールドについてかなりよく知っています:

private final static int NUMBER = 10;

private final int NUMBER = 10;

私の質問はカプセル化 (OO として) ではなく、パフォーマンスです。

パフォーマンス、staticまたはnon-staticフィールドに使用する方が良いです。

アイデアは、ほとんどの私のロジックで のようなプリミティブを使用するということですfloat/int

すべての「ビュー」に対して汎用スーパークラスを作成します。このクラスは、パフォーマンスの範囲でより効率的である必要があります。

次に例を示します。

    /** Sprite sheet definition */
private final int SPRITE_WIDTH = 4;
private final int SPRITE_HEIGHT = 4;

private float mScreenWidth, mScreenHeight, wRatio, hRatio;
private int mFrame = 0;
private int mSwitcher = 0;
private final int TEXTURE_COUNT = 1; // for sprite sheet we use 1 image all the time.
private int[] textures = new int[TEXTURE_COUNT]; // frame animation

protected FloatBuffer vertexBuffer;

private final ESpriteDirection mDirection = ESpriteDirection.TOP_TO_DOWN_LEFT_TO_RIGHT;


public float x, y, initPos, finalPos, initSpeed, currentPos;

private ByteBuffer bb1;

private final int TOTAL_IMAGE_COUNT_IN_SPRITE = SPRITE_WIDTH * SPRITE_HEIGHT;

private FloatBuffer[] floatBufferArray = new FloatBuffer[TOTAL_IMAGE_COUNT_IN_SPRITE];

private float xOffset = 1.0f/SPRITE_WIDTH;
private float yOffset = 1.0f/SPRITE_HEIGHT;




private float vertices[] = {            
        0.0f,3.0f,0.0f,
        0.0f,0.0f,0.0f,                 
        3.0f,3.0f,0.0f,
        3.0f,0.0f,0.0f  
};


private float storage[][] = new float[TOTAL_IMAGE_COUNT_IN_SPRITE][];
private int[] sprite_X_Indexes = new int[SPRITE_WIDTH];//{1,2,3,4}; 
private int[] sprite_Y_Indexes = new int[SPRITE_WIDTH];//{1,2,3,4};

static同じクラスフィールドの複数のイニシエーションの方が優れていると推測できます。うーん

ありがとうございました、

4

1 に答える 1

9

パフォーマンス POV から、静的フィールドと (単一の) 非静的フィールドの両方がメモリ ロケーションに変換されているため、コードがコンパイルされるとほとんど違いはありません。

フィールド static を宣言すると、コンパイラ レベルでの最適化の可能性が提供される場合があります。一方、通常、静的オブジェクトはメモリ内のインスタンス データに「近く」ない可能性が高く、これはキャッシュ パフォーマンスに悪影響を及ぼします。

一般に、これは、すべてのアルゴリズムの最適化を使い果たすまで/まで時間を費やすべき場所ではなく、実際に時間を失う場所であることがわかった後でのみです。

于 2013-07-19T12:52:31.677 に答える