2016-12-10 1 views
0

Ich habe ein einfaches Top-Down-2D-Java-Spiel in den letzten anderthalb Wochen erstellt. Es läuft perfekt auf meinem Windows-Computer, und ein paar meiner Freunde haben es auch gut auf ihren Computern ausgeführt.Einfache 2D Java Spiel Verzögerungen auf Mac

Vor kurzem habe ich versucht, das Spiel auf meinem Mac zu laden, aber es scheint schrecklich zu verzögern und verlangsamt meinen ganzen Computer. Dies passiert nur, wenn das Spiel ausgeführt wird und kehrt zum normalen Modus zurück, wenn ich es verlasse.

Ich habe eine meiner Klassen unten angefügt, die das Problem verursachen könnte, obwohl ich glaube, dass es wahrscheinlich etwas mit meinem Computer zu tun hat.

public class Game implements Runnable { 
//DISPLAY 
private Display display; 
private int width, height; 
public String title; 
//THREADS 
private boolean running = false; 
private Thread thread; 
//BUFFERING AND HRAPHICS 
private BufferStrategy bs; 
private Graphics g; 

// Statess 
public States gameState, island; 
private States menuState; 

// Input 
private KeyManager keyManager; 
private MouseManager mouseManager; 
//UI 

// Handler 
private Handler handler; 
//TIMER 
Timer myTimer = new Timer(); 
public static int seconds = 0; 
int count = 0; 
//PAUSE 
private boolean paused = false; 
public Game(String title, int width, int height) { 
    this.width = width; 
    this.height = height; 
    this.title = title; 
    keyManager = new KeyManager(); 
    mouseManager = new MouseManager(); 


} 

private void init() { 
    display = new Display(title, width, height); 
    display.getFrame().addKeyListener(keyManager); 
    display.getFrame().addMouseListener(mouseManager); 
    display.getFrame().addMouseMotionListener(mouseManager); 
    display.getCanvas().addMouseListener(mouseManager); 
    display.getCanvas().addMouseMotionListener(mouseManager); 
    Assets.init(); 

    handler = new Handler(this); 

    gameState = new GameState(handler, 9, 79, 1502, 79); 
    island = new Island(handler, 20, 190, 1450, 190); 
    menuState = new MenuState(handler); 
    States.setState(menuState); 

} 



private void tick() { 
    keyManager.tick(); 
    setPaused(); 
    if(!paused){ 
     States.getState().tick(); 
     if(count == 0){ 
     if(States.getState() != menuState){ 
      myTimer.scheduleAtFixedRate(new TimerTask() { 

       @Override 
       public void run() { 
        seconds++; 
       } 
      }, 1000, 1000); 
     count = 1; 
     } 
     } 
     //System.out.println(seconds); 
    } 
    render(); 
} 


public void paused(Graphics g){ 
    g.drawString("Paused", 750, 200); 
} 

private void render() { 

    bs = display.getCanvas().getBufferStrategy(); 
    if (bs == null) { 
     display.getCanvas().createBufferStrategy(3); 
     return; 
    } 
    g = bs.getDrawGraphics(); 
    // Clear Screen 
    g.clearRect(0, 0, width, height); 
    // Draw Here! 
    //Rendering 
    //State render 

     States.getState().render(g); 
     //UI 
     if(States.getState() != menuState){ 
      if(paused) 
      paused(g); 
     } 
    // End Drawing! 
    bs.show(); 
    g.dispose(); 
} 



public void run() { 

    init(); 

    int fps = 60; 
    double timePerTick = 1000000000/fps; 
    double delta = 0; 
    long now; 
    long lastTime = System.nanoTime(); 
    long timer = 0; 
    //int ticks = 0; 

    while (running) { 
     now = System.nanoTime(); 
     delta += (now - lastTime)/timePerTick; 
     timer += now - lastTime; 
     lastTime = now; 

     if (delta >= 1) { 
      tick(); 

      //ticks++; 
      delta--; 
     } 

     if (timer >= 1000000000) { 

      //ticks = 0; 
      timer = 0; 
     } 
    } 

    stop(); 

} 

public States getGameState(){ 
    return gameState; 
} 
public KeyManager getKeyManager() { 
    return keyManager; 
} 

public MouseManager getMouseManager() { 
    return mouseManager; 
} 

public int getWidth() { 
    return width; 
} 

public int getHeight() { 
    return height; 
} 
//TIMER 


public synchronized void start() { 
    if (running) 
     return; 
    running = true; 
    thread = new Thread(this); 
    thread.start(); 
} 

public synchronized void stop() { 
    if (!running) 
     return; 
    running = false; 
    try { 
     thread.join(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public boolean isPaused() { 
    return paused; 
} 

public void setPaused() { 
    if(handler.getKeyManager().keyJustPressed(KeyEvent.VK_U)) 
     paused = !paused; 
} 
} 

Display.java

public class Display { 

    private String title; 
    private int height; 
    private int width; 
    private Canvas canvas; 
    private JFrame frame; 

    public Display(String title, int width, int height) { 
     this.title = title; 
     this.height = height; 
     this.width = width; 
     createDisplay(); 
    } 

    public void createDisplay() { 
     // Make frame 
     frame = new JFrame(title); 
     frame.setSize(width, height); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     // canvas to draw graphics 
     canvas = new Canvas(); 
     canvas.setPreferredSize(new Dimension(width, height)); 
     canvas.setMaximumSize(new Dimension(width, height)); 
     canvas.setMinimumSize(new Dimension(width, height)); 
     canvas.setFocusable(false); 
     // Display canvas through jframe 
     frame.add(canvas); 
     frame.pack(); 
    } 
    public Canvas getCanvas(){ 
     return canvas; 
    } 
    public JFrame getFrame(){ 
     return frame; 
    } 
} 
+0

Verbesserte Lesbarkeit –

Antwort

0

Es ist ein Problem mit Ihrem Betriebssystem bezogen, verbessern Sie den Code im Anschluss an diesen Fragen bereits gestellt:

Link 1

Link 2

Händler um Ihre Java-Version zu aktualisieren und wenn Möglich machen Sie Ihren Code kürzer.