为了给我的游戏添加一个惊喜因素,我决定随机反转背景颜色。当玩家收集时,让我们说,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 :(得分: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());
}
这就是我写它的方式。您正在写入数组,然后在不使用它的情况下重写它。
这可能不会显着减少延迟,但可能会有所帮助。