So basically in my game(completely new to gave dev) I have a level select screen. I have 8 Buttons to select the levels and i use an asset manager to load the textures for the buttons. For example their is a locked button for when you have unlocked the level, an active for when your mouse is over the button and inactive when your mouse is not over it. My problem is that having all these textures keep interchanging is causing memory usage to go off the charts, from as low as 30mb all the way over 1000mb as soon as i go to the level select screen and it keeps rising. Whats a good way to load lots of textures without having to use so much memory? Or should i just figure out a better way to load them without causing so much usage of memory. Im new to this so go easy on me :)
or... Would this amount of memory being sprung be a memory leak somewhere?
Edit: Heres the code snippet where the memory leak i traced to i believe.
I'm calling this method in my handleInput which i then call in the render method.
public void levelManager(float rowX, float rowY, Screen setScreen, Texture drawActive, Texture drawInactive, float multiplier) { if (Gdx.input.getX() / GravitySpikesRevamped.PPM < (rowX + BUTTON_WIDTH) / GravitySpikesRevamped.PPM && Gdx.input.getX() / GravitySpikesRevamped.PPM > rowX / GravitySpikesRevamped.PPM && (GravitySpikesRevamped.GAME_HEIGHT - Gdx.input.getY()) / GravitySpikesRevamped.PPM < (rowY + BUTTON_HEIGHT) / GravitySpikesRevamped.PPM && (GravitySpikesRevamped.GAME_HEIGHT - Gdx.input.getY()) / GravitySpikesRevamped.PPM > rowY / GravitySpikesRevamped.PPM) { if (multiplier == 1) { game.batch.draw(drawActive, BUTTON_WIDTH / 2 / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } else if (multiplier == 2) { game.batch.draw(drawActive, BUTTON_WIDTH * 2 / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } else if (multiplier == 3) { game.batch.draw(drawActive, BUTTON_WIDTH * 3.5f / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } if (Gdx.input.isTouched()) { game.setScreen(setScreen); } } else { if (multiplier == 1) { game.batch.draw(drawInactive, BUTTON_WIDTH / 2 / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } else if (multiplier == 2) { game.batch.draw(drawInactive, BUTTON_WIDTH * 2 / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } else if (multiplier == 3) { game.batch.draw(drawInactive, BUTTON_WIDTH * 3.5f / GravitySpikesRevamped.PPM, rowY / GravitySpikesRevamped.PPM, BUTTON_WIDTH / GravitySpikesRevamped.PPM, BUTTON_HEIGHT / GravitySpikesRevamped.PPM); } } Okay i solved it, basically in my method above every time i called it was creating a new screen. So i basically was creating infinite amount screens in memory. I fixed it :]
Buttonclass in which the normal image, click image, hover image etc can be set. \$\endgroup\$