2016-03-22 6 views
0

Um meinem Spiel einen Überraschungsfaktor hinzuzufügen, habe ich beschlossen, die Hintergrundfarben zufällig umzukehren. Wenn der Spieler zum Beispiel 21 goldene Speckstreifen sammelt, ändert sich der Hintergrund. Durch Modifizieren des Pixels des Bitmap, ich habe dies durch den folgenden Code getan:Reibungsloses Aktualisieren der Bitmap

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()); 
} 

jedoch einmal die Farben invertiert sind, trifft das Spiel große Verzögerung. Zu meiner Überraschung dachte ich, diese Art der Bitmap-Aktualisierung wäre am effektivsten - was die Speicherkapazität angeht. Was wäre der richtige Weg, um diesem Fehler zu begegnen?

Antwort

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()); 
} 

So würde ich es schreiben. Sie haben in Array geschrieben und es dann neu geschrieben, ohne es zu verwenden.

Dies kann Lag nicht signifikant reduzieren, aber es kann zu einem gewissen Grad helfen.