私は非常に大きなマップを必要とする基本的なスペースリアルタイム戦略ゲームを作成していますが、一度にマップの小さな部分のみを表示します。私はこれが非常にイメージビューを使用してビューポートで行うことが容易であることがわかった。残念ながら、画像ビューには画像を渡す必要があり、キャンバスを使用してすべてのスプライトを背景に描画しています。私は完全にレンダリングされたシーンのイメージを撮ってイメージビューに渡すためにスナップショットを使っていましたので、ビューポートを使うことができましたが、それはパフォーマンスの重大な低下を引き起こしています。スナップショットを使用しない場合、ゲームは60+ fpsで動作しますが、スナップショットを使用する場合はfpsは常に15以下です。スナップショットの使用は、シーンが1024x512だったときは問題ありませんでしたが、シーンは現在4096x2048です。スナップショットを使用せずに秒間に60回イメージビューとビューポートを使用するより良い方法はありますか?私は以下のやっているのコード例:https://github.com/WiredOverload/ObliterateEverythingjavafxスナップショットのパフォーマンスが遅い
私は、私はスナップショットが行われている間、残りのコードを遅らせることを避けるために、非同期スナップショットを使用することができることを知っているが、その時
Group trueRoot = new Group(); //shown image
Group root = new Group(); //invisible unedited image
Canvas canvas = new Canvas(4096, 2048); //unedited canvas
root.getChildren().add(canvas);
GraphicsContext gc = canvas.getGraphicsContext2D();
Scene scene2 = new Scene(trueRoot);
primaryStage.setScene(scene2);
WritableImage sceneImage = root.snapshot(new SnapshotParameters(), null); //snapshot of fully rendered root scene
ImageView imageView = new ImageView(sceneImage); //imageView can be used to resize or crop
Rectangle2D viewportRect = new Rectangle2D(0, 0, 1024, 512); //for cropping
imageView.setViewport(viewportRect); //for cropping
trueRoot.getChildren().add(imageView); //also for resizing/cropping
new AnimationTimer() {
public void handle(long currentNanoTime) {
//simple animated background
if (cloudTimer == 16384)
cloudTimer = 0;
else
cloudTimer++;
gc.drawImage(stars, 0, 0);
gc.drawImage(clouds1, cloudTimer % 16384, 0);
gc.drawImage(clouds1, (cloudTimer % 16384) - 8192, 0);
gc.drawImage(clouds2, (cloudTimer/2) % 16384, 0);
gc.drawImage(clouds2, ((cloudTimer/2) % 16384) - 8192, 0);
p1.update(p2, root);
p2.update(p1, root);
p1.render(gc, root);
p2.render(gc, root);
root.snapshot(new SnapshotParameters(), sceneImage); //takes root scene and hands it to trueRoot
}
}.start();
primaryStage.show();
完全なコードまだ15 fpsでゲームを離れるだろう。任意の提案をいただければ幸いです。
おかげで、私がしようとするでしょう私のコードにこれを実装してください。私がそれを正しく入れることができれば、それはうまくいっているかどうかを言うでしょう。 – WiredOverload