[Slick2d] Sidescroller/Hintergrundbild sehr langsam

LEjava

Mitglied
Hallo alle zusammen!

Ich habe ein Jump'n'Run Spiel programmiert nur leider wird es sehr langsam sobald ich den Hintergrund rendere. Es ist eigentlich ein Sidescroller gedacht mit drei Bildern (550 x 350, á 200kB). Jedoch tritt das Problem auch auf wenn ich nur ein Bild statisch (ohne das es sich bewegt/mitläuft) rendere.

Ansonsten läuft das Spiel mit all seinen Animationen, Gegnern und Objekte sehr gut.

Gibt es dafür eine Lösungsidee oder sind solche Bilder dafür einfach zu groß?

Hier ein Auszug aus dem Programm:

Java:
    @Override
    public void init(GameContainer gc) throws SlickException {
        
        input = gc.getInput();        
        
        backgrounds.add(new Background("GameData/Pictures/bg/11.png",0));
        backgrounds.add(new Background("GameData/Pictures/bg/22.png",
                backgrounds.get(0).getWidth()));
        backgrounds.add(new Background("GameData/Pictures/bg/33.png",
                backgrounds.get(1).getWidth() + backgrounds.get(0).getWidth()));
        
   ...
   }
   @Override
    public void update(GameContainer gc, int i) throws SlickException {
        
        if(input.isKeyDown(input.KEY_RIGHT) && player.isMaxRight()){            

            for(Background bg : backgrounds)
                bg.decPosition(player.getSpeed());
            ...
    }

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException {

        for(Background bg : backgrounds){
            g.drawImage(bg.getImage(), bg.getPosition() ,0);
        }
   ...
   }

}

public class Background {
    private int width;
    private int position;
    private Image image;

    public Background(Image image,int position ) {
        this.position = position;
        this.image = image;
        this.width = image.getWidth();
    }
    
    public Background(String path, int position) throws SlickException{
        this.position = position;
        this.image = new Image(path);
        this.width = image.getWidth();
    }


    public int getWidth() {
        return width;
    }

    public int getPosition() {
        return position;
    }

    public Image getImage() {
        return image;
    }

    public void setPosition(int position) {
        this.position = position;
    }
    
    public void decPosition(int decr) {
        this.position -= decr;
    }
    
    public void changeImage(Image image){
        this.image = image;
        this.width = image.getWidth();
    }
    
    
    
}

Viele Grüße

LEjava
 
Ich habe nun ein einziges SpriteSheet ohne die Klasse Background verwendet und nun ist es etwas besser geworden. FPS bei ca 30. Allerdings ruckelt es manchal als ob die Grafik nicht so ganz mit kommt.

Bin immer noch für Ideen sehr dankbar!
 
Mach deine Canvis durchsichtig und Render das Bild als Hintergrund auf einem Compoennt der dahinter platziert ist. Und Repainte den weniger häufig.
Oder weise deiner Anwendung mehr Ram und einen OPEN GL Force zu (via start Parameter)
 

Neue Themen


Zurück
Oben