Повторное использование растровых изображений в Android

1

Я работаю над Android-игрой (платформой 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) Является ли что-нибудь сохраненным на нативной куче моим приложением, отличным от Bitmaps? Есть ли способ взглянуть на это и посмотреть, что там? Это примерно на 6 килограмм после того, как я переработал все мои растровые изображения, чтобы загрузить их на новый уровень, я чувствую себя немного выше.

Заранее спасибо!

Теги:
memory

1 ответ

1

Во-первых, вы хотите задать вам вопросы: когда произойдет OutOfMemory? Когда вы загружаете растровые изображения или в середине игры?

Здесь подход, который я использую в течение длительного времени, и мне кажется самым удобным для меня:

  1. Создайте класс, который будет загружать и выгружать все Bitmaps в вашем приложении.
  2. Пусть ссылки на объекты Bitmap вашего BitmapManager (пусть называют его таким образом) будут общедоступными.
  3. Не держите ссылки на объекты Bitmap внутри своих классов, просто используйте ссылки на объекты BitmapManager внутри метода onDraw ваших объектов.

При создании зеркальных Bitmaps обязательно создавайте их во время выполнения. Зеркалируйте их все при загрузке растровых изображений, иначе они убьют ваше приложение. Надеюсь это поможет.

  • 0
    Это происходит, когда я загружаю растровые изображения в начале уровня. Я должен загрузить в фоновом режиме, растровое изображение размера экрана, чтобы нарисовать уровень, и спрайт-листы для игрока и врага. Кроме того, есть ли польза от хранения всех спрайтов игроков на одном листе, а не на отдельных листах для каждой анимации?
  • 0
    @CodyAlbert, никогда не использовал спрайт-листы при разработке игр для Android, поэтому не могу ответить на ваш вопрос ..
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню