私はこの質問の目的のために、JPanel(GamePanel)を拡張するクラスを追加するJFrameを拡張するクラスを持つゲームを作っています。 GamePanelでは私は2つの関数update()を持つrunメソッドを持っています。とrepaint(); Thread.sleep(20)を呼び出します。更新機能は約1〜2msかかる。私はpaintComponent(Graphics g)に私の描画のすべてを持っています。これは、画面上に何かが表示されてからrepaint()を使うと正しく呼び出されるようです。低い計算で低いfps Java paintcomponent
私の問題は、それは不条理に遅れているということです。私がThread.sleep(20)を持っていなかったとき、それは2fpsのようにunplayableでした。私は、これは、repaint()が完了するのに十分な時間を与えられていなかったか、何か、次のループの前に遅延を追加したことが原因であると読んでいます。 20ms以上またはそれ以下のものは、それをより遅くするようです。
私はグラフィックス構成のものを使用しようとしました、ダブルバッファリングとそれ以上ですが、それは遅いままです。私の家庭のPC、Intel i5、クアッドコア、3.2GHzで約100fpsしか得られず、学校コンピュータでは約15fps(ok pc、amd dual coreのようなものだと思う)だ。 paintComponentループは超軽量です!プレイヤーの位置に応じてオフセットをつけたドローマップを作成し、画面の真ん中にプレーヤーを描きます!私は2000x2000、0.8mbの地図を使用しています。 1000x1000への切り替えを試みましたが、0.4mbと違いはありません。これは下降コンピュータ上の比較的素晴らしいコンピュータと15fpsの上で100FPSになり
@Override
public void paintComponent(Graphics g) {
//Rendering settings and stuff
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//Draw map gameMap.gameMap is a bufferedImage
g2d.drawImage(gameMap.gameMap, gameMap.x, gameMap.y, null);
//Draw health bar
g2d.setColor(healthBarColor);
g2d.setComposite(alphaHealthBarBackground);
g2d.fillRect(100, 19, 200, 23);
g2d.setFont(font);
g2d.setComposite(alphaNormal);
g2d.setColor(healthBarColor);
g2d.drawString("HP: ", 20, 40);
g2d.fillRect(100, 19, player.health * 2, 23);
//Draw player player.playerImage is a BufferedImage
rotatePlayer.setToRotation(rotation, rotationAnchor.x, rotationAnchor.y);
rotatePlayer.translate(xResolution/2, yResolution/2);
g2d.drawImage(player.playerImage, rotatePlayer, this);
g2d.setColor(Color.white);
}
:ここ
は、コードです!
「this」はどれくらい大きく塗られていますか? * "降下コンピュータの15fps!" *それが理解できれば、それが地獄に降下しているので、それは地獄に行くからです。 ;) –
まあ、私はあなたが理解している場合は、 "この"塗装されている画面サイズと同じくらい大きいです。アプリケーションはフルスクリーンです。私はツールキットを使ってスクリーンサイズを取得するので、それは1920x1080で、学校では画面が1280x1024だと信じています... ハハ、まともな;)funny Joke ...:P – Opfff
注:1)FPSテストは固定レンダリングサイズ2)質問を編集してスペルを変更することができます。だから、私はあなたの裁量でそれを残すでしょう。 :) –