2015-03-02 5 views
-1

У меня возникла проблема, создающая экземпляр класса в Java, по существу он генерирует новый мир для каждого тика, который немного расстраивает, когда программа запускается. Принимая во внимание, что все, что мне нужно сделать, это создать экземпляр, затем получить доступ к переменной внутри класса.Java - создание экземпляра класса в цикле

Вот код:

Background.java

public class Background extends UserView { 
    private BufferedImage bg;  

    private static Game game;  

    public Background(World w, int width, int height) {   
     super(w, width, height); 
     try { 
      bg = ImageIO.read(new File("data/background.jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void paintBackground(Graphics2D g) {   
     super.paintBackground(g); 
     game = new Game(); 
     g.drawImage(bg, 0, 0, this); 
     int level = game.getLevel(); 
     g.drawString("Level: " + level, 25, 25); 
    } 

} 

Game.java

public Game() { 
    // make the world 
    level = 1; 
    world = new Level1(); 
    world.populate(this); 

    // make a view 
    view = new Background(world, 500, 500);  

    // uncomment this to draw a 1-metre grid over the view 
    // view.setGridResolution(1); 

    // display the view in a frame 
    JFrame frame = new JFrame("Save the Princess"); 

    // quit the application when the game window is closed 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationByPlatform(true); 
    // display the world in the window 
    frame.add(view); 
    // don't let the game window be resized 
    frame.setResizable(false); 
    // size the game window to fit the world view 
    frame.pack(); 
    // make the window visible 
    frame.setVisible(true); 
    // get keyboard focus 
    frame.requestFocus(); 
    // give keyboard focus to the frame whenever the mouse enters the view 
    view.addMouseListener(new GiveFocus(frame)); 

    controller = new Controller(world.getPlayer()); 
    frame.addKeyListener(controller); 

    // start! 
    world.start(); 
} 

    /** Run the game. */ 
public static void main(String[] args) { 
    new Game(); 
} 

Любая помощь будет оценен по достоинству! Спасибо!

+0

Где находится петля ?? –

+0

Извините, это по какой-то причине просто циклы вокруг, когда я запускаю игру, обновил код из основного класса. – Henry

ответ

0

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

public class Background extends UserView { 

    private BufferedImage bg; 

    private static Game game = new Game(); 

    public Background(World w, int width, int height) { 
     super(w, width, height); 
     try { 
      bg = ImageIO.read(new File("data/background.jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void paintBackground(Graphics2D g) { 
     super.paintBackground(g); 
     g.drawImage(bg, 0, 0, this); 
     int level = game.getLevel(); 
     g.drawString("Level: " + level, 25, 25); 
    } 
} 

Если добавить больше кода и скажите, что вы хотите и что получите, мы можем сказать вам больше об этом.

+0

Спасибо, я добавил больше кода о том, где происходит проблема. – Henry

+0

Пока еще недостаточно сказать, что делать лучше :). – libik

+0

По существу мне нужно создать экземпляр игры в фоновом классе, но он продолжает генерировать новую игру каждый раз, когда я выбираю run, в цикле. – Henry

Смежные вопросы