Hello there! Again, i met a problem.
Until now i used to render only 32x32 or 40x40 sprites. But now when i needed to render some bigger image my game went from 60FPS to 4-5 FPS.
Here is my rendering code:
g.clearRect(0, 0, screen.getWidth(), screen.getHeight());
g.setColor(new Color(0x000000));
g.fillRect(0, 0, screen.getWidth(), screen.getHeight());
g.translate(xOffset, yOffset);
for(int i=0; i<onscreenTiles.size(); i++) {
Tile t = (Tile) onscreenTiles.get(i);
if(t instanceof FloorTile)
g.drawImage(t.getImage(), null, (int) t.getX(), (int) t.getY());
else if(t instanceof HoleTile)
g.drawImage(t.getImage(), null, (int) t.getX(), (int) t.getY());
else if(t instanceof PathTile)
g.drawImage(t.getImage(), null, (int) t.getX(), (int) t.getY());
}
for(int i=0; i<level.getOthers().size(); i++) {
if(level.getOthers().get(i) instanceof Drop) {
Drop d = (Drop) level.getOthers().get(i);
d.getAnim().draw(g, d.getX(), d.getY());
}
}
for(int px=Math.max(0 ,(int) -yOffset)-24; px<=Math.max(0, Math.abs((int) yOffset)) + screen.getHeight(); px++) {
for(int i=0; i<onscreenEntities.size(); i++) {
Entity e = (Entity) onscreenEntities.get(i);
if(e != null && (int)e.getY() == px) {
if(e instanceof Mummy) {
if(((Entity) e).isDead()) ((Mummy) e).getDieAnim().draw(g, (float) (e.getX()-e.getWidth()/2), (float) (e.getY()-e.getHeight()/2));
else ((Mummy) e).getMoveAnim().draw(g, e.getX(), e.getY());
} else if(e instanceof Spawner) {
if(((Entity) e).isDead()) ((Spawner) e).getDieAnim().draw(g, (float) (e.getX()-e.getWidth()/2), (float) (e.getY()-e.getHeight()/2));
else g.drawImage(e.getImage(), null, (int) e.getX(), (int) e.getY());
}
}
}
for(int i=0; i<pl.getBullets().size(); i++) {
Entity e = (Entity) pl.getBullets().get(i);
if((int)e.getY() == px && isInScreen(e)) {
g.drawImage(e.getImage(), null, (int) e.getX(), (int) e.getY());
}
}
if((int)pl.getY() == px) {
if(!pl.isWalking()) g.drawImage(pl.getImage(), null, (int) pl.getX(), (int) pl.getY());
else pl.getMoveAnim().draw(g, pl.getX(), pl.getY());
if(pl.isFiring()) pl.getmFlash().draw(g, pl.getMuzzleX(), pl.getMuzzleY());
}
for(int i=0; i<level.getBuildings().size(); i++) {
Building b = (Building) level.getBuildings().get(i);
g.drawImage(b.getImage(), null, (int) b.getX(), (int) b.getY());
}
for(int i=0; i<onscreenTiles.size(); i++) {
Tile t = (Tile) onscreenTiles.get(i);
if((int)t.getY() == px && t instanceof WallTile) {
g.drawImage(t.getImage(), null, (int) t.getX(), (int) t.getY()-24);
}
}
}
The problem is at
for(int i=0; i<level.getBuildings().size(); i++) {
Building b = (Building) level.getBuildings().get(i);
g.drawImage(b.getImage(), null, (int) b.getX(), (int) b.getY());
}
The image is 256x224 and is loaded (as the others) at the application start.
What can i do?