2016-10-26 3 views
1

私はJavaでゲームを作ろうとしていて、問題が発生しました。私のプログラムが私のCPUから多くの電力を消費するJFrameを再描画するとき、私は見過ごされている目障りなミスやCPU使用量を減らす方法があるのか​​疑問に思っていました。JPanelを再描画するとCPUが増える

Frame.java

public class Frame extends JFrame { 
    JFrame frame; 
    public static Panel panel; 

    public void makeFrame() { 
     frame = new JFrame("Game"); 
     panel = new Panel(); 
     panel.init(); 

     frame.setSize(1000, 1000); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     frame.setVisible(true); 
     frame.add(panel); 
    } 
} 

GameLoop.java

public class GameLoop { 
//render gets called 30 times per second 
    private void render() { 
     Frame.panel.repaint(); 
    } 
} 

Panel.java

public class Panel extends JPanel { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     mvmt.drawCha(g2d); //mvmt is an instance of Movement 
    } 
} 

Movement.java

public class Movement { 
    public void drawCha(Graphics2D g2d) { 
     g2d.drawImage(charImg, x , y, x + 40 , y + 40, 0, 0, 17, 28, null); 
    } 
} 

事前にお手伝いをしてください!

+0

お使いのシステムでは、どのような種類のCPUを使用していますか?画面の解像度はどのくらいですか? – sorifiend

+0

@sorifiendそれはintel i5 7世代で、画面は1920x1080です –

+0

再塗装は本当に30/s必要ですか?状態の変化があった場合、ただ再焼成しないのはなぜですか? –

答えて

1

あなたはすでにループを1秒間に30ティックに制限していると言いますが、再描画が原因ではないと思います。再ペイントしないと、まだCPU使用量が多いですか?

もしそうなら、私はあなたのCPUがあなたのループに行くと、それはあなたのCPUを排水するので、ダニの間に何もしていないと思う。これはすべて私があなたがスレッドを使用していると仮定しているとスレッドの余裕時間で何もしないでください。

+0

このプログラムでは、repaintメソッドを使用して約60%のCPUを使用し、30%を使用します。私はループのCPU使用量を削減したいと思いますが、私は一度に1つの問題に取り組むと思いました。また、私がループに使ったメソッドは 'System.nanotime()'を使っています。 –

+0

@CharlieLandriganあなたが使っている使い方は、標準CPUまたは下位CPUの場合は普通の音です。使用量を減らす1つの方法は、画面の変更/更新された部分のみを(画面全体ではなく)再描画することですが、再描画するものを追跡するための余分なロジックが必要です。 – sorifiend

関連する問題