2016-03-22 11 views
0

ゲームに驚きの要素を追加するだけで、背景色をランダムに反転させることに決めました。プレーヤーが収集するとき、21の黄金のベーコンが背景の変化を取り除くとしましょう。ビットマップのピクセルを変更することによって、私は次のコードを介してこれを行っている:色が反転された後スムーズにビットマップを更新する

public void invert() { 
    int length = BackBitmap.getWidth() * BackBitmap.getHeight(); 
    int[] array = new int[length]; 
    BackBitmap.getPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight()); 
    int[] array2 = new int[length]; 
    int a2 = 0; 

    for(int col = 0; col < BackBitmap.getHeight(); col++){ 
     for (int row = 0; row < BackBitmap.getWidth();row++){ 
      array2[a2] = BackBitmap.getPixel(row,col); 
      a2++; 
     } 
    } 

    for (int i=0;i<length;i++){ 
     array[i] = 0xFFFFFF - array2[i]; 
     } 
    BackBitmap = BackBitmap.copy(Bitmap.Config.ARGB_8888, true); 
    BackBitmap.setPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight()); 
} 

はしかし、ゲームは大きな遅れが発生しました。私の驚いたことに、ビットマップを更新するこの方法が最も効果的だと思いました。このエラーに近づくにはどうすればよいでしょうか?

答えて

0
public void invert() { 
    int length = BackBitmap.getWidth() * BackBitmap.getHeight(); 
    int[] array = new int[length]; 
    int[] array2 = new int[length]; 
    BackBitmap.getPixels(array2, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight()); 

    for (int i=0;i<length;i++){ 
     array[i] = 0xFFFFFF - array2[i]; 
    } 
    BackBitmap = BackBitmap.copy(Bitmap.Config.ARGB_8888, true); 
    BackBitmap.setPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight()); 
} 

これは私がそれを書く方法です。あなたは配列に書いていて、それを使わずに書いていました。

これは遅延を大幅に減らすことはできませんが、それはある程度助けになるかもしれません。