안드로이드 게임 (2d 플랫폼)에서 작업 중이며 메모리 부족 문제가 발생합니다. 나는 주어진 시간에 메모리에 저장되는 비트 맵의 수를 줄이기 위해 할 수있는 모든 것을했지만 여전히 문제가있다. 몇 가지 간단한 질문.안드로이드에서 비트 맵 재사용
1) 다음 코드는 적의 모든 인스턴스에 대해 하나의 비트 맵을 올바르게 사용합니까?
Bitmap pusher2 = BitmapFactory.decodeResource(res, R.drawable.pusher_white);
Bitmap stinger2 = BitmapFactory.decodeResource(res,R.drawable.stinger_glow_v2_135x135)
Bitmap lightTrap2 = BitmapFactory.decodeResource(res, R.drawable.light_trap_v3_64x33);
Enemy e21 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 17*32, 61*32-32, -50, 0);
Enemy e22 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 27*32, 57*32-32, -50, 0);
Enemy e23 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 47*32, 34*32-32, -50, 0);
Enemy e24 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 10*32, 29*32-32, -50, 0);
Enemy e25 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 19*32, 29*32-32, 50, 0);
Enemy e26 = new Enemy(assets, pusher2, Enemy.SLIME, 32, 42, 12, 12, 35*32, 20*32-32, -50, 0);
Enemy e27 = new Enemy(assets, stinger2, Enemy.STINGER, 135, 135, 22, 22, 32*32, 57*32-135, 144, 0, 23*32, 42*32);
Enemy e28 = new Enemy(assets, stinger2, Enemy.STINGER, 135, 135, 22, 22, 30*32, 40*32-135, 144, 0, 26*32, 41*32);
Enemy e29 = new Enemy(assets, stinger2, Enemy.STINGER, 135, 135, 22, 22, 35*32, 6*32-135, 144, 0);
Enemy e2a = new Enemy(assets, lightTrap2, Enemy.LIGHT_TRAP, 33, 64, 5, 24, 30*32, 21*32-33, 0, 0);
Enemy e2b = new Enemy(assets, lightTrap2, Enemy.LIGHT_TRAP, 33, 64, 5, 24, 40*32, 21*32-33, 0, 0);
Enemy e2c = new Enemy(assets, lightTrap2, Enemy.LIGHT_TRAP, 33, 64, 5, 24, 34*32, 13*32-33, 0, 0);
2) 길 찾기를 변경하는 일반적인 방법은 스프라이트 시트를 원본의 미러 사본으로 바꾸는 것입니다. 이 방법은 플레이어에게 좋지만 동일한 시트를 모두 참조하는 경우 적에게는 불가능한 것처럼 보입니다. 모든 적의 스프라이트 시트의 미러 사본과 미러되지 않은 사본을 모두 메모리에 저장해야합니까, 아니면 더 좋은 방법이 있습니까?
3) 비트 맵이 아닌 다른 응용 프로그램에서 원시 힙에 저장된 내용이 있습니까? 거기를보고 어떤 것이 있는지 볼 방법이 있습니까? 새로운 레벨로로드하기 위해 모든 비트 맵을 재활용 한 후 약 6k에 있습니다. 조금 높은 느낌입니다.
미리 감사드립니다!
레벨 시작 부분에 비트 맵을로드하면 발생합니다. 나는 백그라운드에서로드해야하는데, 비트 맵은 레벨을 그리기위한 스크린의 크기이고, 플레이어와 적을위한 스프라이트 시트이다. 제쳐두고 각 애니메이션마다 별도의 시트가 아닌 모든 스프라이트를 하나의 시트에 저장하면 어떤 이점이 있습니까? –
@CodyAlbert, 네이티브 Android 게임 개발에서 스프라이트 시트를 사용한 적이 없으므로 질문에 대답 할 수 없습니다 .. – Egor
'bm.recycle()'비트 맵을 재활용한다고 가정하면 같은 비트 맵을 다시로드하려고하면 IllegalStateException '. 비트 맵을 재활용 한 후 다시로드하는 방법에 대한 의견이 있으십니까? –