Estou com problema na otimização do meu mapa, quando movimento meu personagem da para perceber o mapa carregando pq aparece umas bordas pretas dele, sei que tem como melhor isso para ser mais rapido e não aparecer mas não estou conseguindo, alem de que o FPS fica abaixo de 40 desde que mudei a camera para movimentar seguindo o personagem sem mostrar a area preta externa, são somente duas imagens contendo o mapa em uma e o personagem com animação, inimigos, tiles e weapons em uma outra, se souberem como posso otimizar isso para melhorar o desempenho de carregar o mapa mais rapido e melhorar o FPS seria de muita ajuda, sou iniciante ainda.
a questão da otimização da camera esta na parte de render, ja vi algumas formas mas não consigo adaptar para o meu codigo, como o de imagem de 16x16px, que a pessoa altera para “>>4” na parte da divisão tirando o “/16” que no meu caso é “/24”, não compreendi como funcionou tal codigo, se precisar de mais informação ou outra parte do codigo é so pedir
’
package com.TenebrisGames.world;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.TenebrisGames.entities.Enemy;
import com.TenebrisGames.entities.Entity;
import com.TenebrisGames.entities.Lifepack;
import com.TenebrisGames.entities.Weapon;
import com.TenebrisGames.main.Game;
public class World {
private Tile[] tiles;
public static int WIDTH, HEIGHT;
public World(String path) {
try {
BufferedImage map = ImageIO.read(getClass().getResource(path));
int[] pixels = new int[map.getWidth() * map.getHeight()];
WIDTH = map.getWidth();
HEIGHT = map.getHeight();
tiles = new Tile[map.getWidth() * map.getHeight()];
map.getRGB(0, 0, map.getWidth(), map.getHeight(), pixels, 0, map.getWidth());
for(int xx = 0; xx < map.getWidth(); xx++) {
for(int yy = 0; yy < map.getHeight(); yy++) {
int pixelAtual = pixels[xx + (yy * map.getWidth())];
tiles[xx + (yy * WIDTH)] = new FloorTile(xx*24, yy*24, Tile.TILE_FLOOR);
if(pixelAtual == 0xFF81BA44) {
//Floor
tiles[xx + (yy * WIDTH)] = new FloorTile(xx*24, yy*24, Tile.TILE_FLOOR);
}else if(pixelAtual == 0xFF7A6358) {
//Wall
tiles[xx + (yy * WIDTH)] = new WallTile(xx*24, yy*24, Tile.TILE_WALL);
}else if(pixelAtual == 0xFF000000) {
//Player
Game.player.setX(xx*24);
Game.player.setY(yy*24);
}else if(pixelAtual == 0xFFC09121) {
//Enemy
Game.entities.add(new Enemy(xx*24, yy*24, 57, 57, Entity.ENEMY_EN));
}else if(pixelAtual == 0xFF0D27DB) {
//Weapon
Game.entities.add(new Weapon(xx*24, yy*24, 57, 57, Entity.WEAPON_EN));
}else if(pixelAtual == 0xFFFA7BFF) {
//Life Pack
Game.entities.add(new Lifepack(xx*24, yy*24, 57, 57, Entity.LIFEPACK_EN));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void render(Graphics g) {
int xstart = Camera.x/24;
int ystart = Camera.y/24;
int xfinal = xstart + (Game.WIDTH/24);
int yfinal = ystart + (Game.HEIGHT/24);
for(int xx = xstart; xx <= xfinal; xx++) {
for(int yy = ystart; yy <= yfinal; yy++) {
if(xx < 0 || yy < 0 || xx >= WIDTH || yy >= HEIGHT)
continue;
Tile tile = tiles[xx + (yy * WIDTH)];
tile.render(g);
}
}
}
}
’