在主游戏循环中旋转位图而不在 Android 中重载 GC
Rotating bitmap in main game loop without overloading GC in Android
在主游戏循环中每帧旋转位图的正确方法是什么?
我尝试过的:
我每帧都创建了旋转位图:
Bitmap image, tmp;
Matrix m;
...
public void mainGameLoop(Canvas c){
m.reset();
m.postRotate(angle);
tmp = Bitmap.createBitmap(image, 0, 0, width, height, m, true);
c.drawBitmap(tmp, 50, 50, null);
}
但是,由于Bitmap.createBitmap每帧创建位图垃圾收集器工作得如此疯狂,导致低帧率。
我试过将所有角度的位图保存在数组中,然后只取我想要的位图。但是,这需要大量 RAM,而且应用无法在高屏幕分辨率下启动。
如果您有什么想法,请在下方留言。
有些人是这样想的:
Bitmap image;
Matrix m;
.
.
.
public YourClass(){
m = new Matrix();
image = Bitmap.createBitmap(image, 0, 0, width, height,);
}
.
.
.
public void mainGameLoop(Canvas c){
m.setRotate(angle, imageCenterX, imageCenterY);
yourCanvas.drawBitmap(image, m, null);
}
在主游戏循环中每帧旋转位图的正确方法是什么? 我尝试过的:
我每帧都创建了旋转位图:
Bitmap image, tmp;
Matrix m;
...
public void mainGameLoop(Canvas c){
m.reset();
m.postRotate(angle);
tmp = Bitmap.createBitmap(image, 0, 0, width, height, m, true);
c.drawBitmap(tmp, 50, 50, null);
}
但是,由于Bitmap.createBitmap每帧创建位图垃圾收集器工作得如此疯狂,导致低帧率。
我试过将所有角度的位图保存在数组中,然后只取我想要的位图。但是,这需要大量 RAM,而且应用无法在高屏幕分辨率下启动。
如果您有什么想法,请在下方留言。
有些人是这样想的:
Bitmap image;
Matrix m;
.
.
.
public YourClass(){
m = new Matrix();
image = Bitmap.createBitmap(image, 0, 0, width, height,);
}
.
.
.
public void mainGameLoop(Canvas c){
m.setRotate(angle, imageCenterX, imageCenterY);
yourCanvas.drawBitmap(image, m, null);
}