私はキャンバスのGrapicConte2Dにピクセルを書き込む簡単な方法を持っています。 int [] - pixelarrayはフレームごとにランダム化され、PixelWriters setPixels() - メソッドで更新されています。網膜ディスプレイで遅い遅いJavafx-パフォーマンス
私は、デュアルモニターセットアップ、「通常の」スクリーンとmacbook pro網膜を持っています。アプリケーションフレームを私の「通常の」画面にドラッグすると、すべてがうまく動作します。しかし、それを私のMacBook Retina Displayに置くと、実際には遅くなる。
何が間違っているのか分かりません。私はコードを数回チェックしていましたが、私は自分自身を助けることはできないようです。
私は助けになる助言があれば非常に感謝しています。
おかげ
コード:
public class CanvasTest extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Random random = new Random();
BorderPane root = new BorderPane();
ScrollPane scrollPane = new ScrollPane();
Canvas canvas = new Canvas(1280, 800);
GraphicsContext gc = canvas.getGraphicsContext2D();
PixelWriter writer = gc.getPixelWriter();
PixelFormat format = PixelFormat.getIntArgbInstance();
int[] pixels = new int[(int) (canvas.getWidth() * canvas.getHeight())];
scrollPane.setContent(canvas);
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
for (int i = 0; i < pixels.length; i++) {
pixels[i] = (255 << 24) | random.nextInt(0xffffff);
}
writer.setPixels(0, 0, (int) canvas.getWidth(), (int) canvas.getHeight(),
format, pixels, 0, (int) canvas.getWidth());
}
};
root.setCenter(scrollPane);
primaryStage.setScene(new Scene(root,1280,800));
primaryStage.show();
timer.start();
}
public static void main(String[] args) {
launch(args);
}
}
コードを投稿することはできますか?それは私たちがあなたを助けるのに役立ちます。 –
ありがとうございます。コードの抜粋を掲載しましたが、役立つかどうかはわかりませんが、非常に簡単です。それは私のCanvasのコンストラクタで行われます。そして、私のキャンバスはBorderPaneにレイアウトされています。 – Adam
あなたの網膜ディスプレイは非常に高い解像度であると推測していますので、このコードは通常のディスプレイよりも遅く動作します。そして、あなたのhandle()メソッドがAnimationTimerによって呼び出される頻度によっては、実際には非常に遅くなることがあります。特に、Random.nextInt()への3回の呼び出しで、すべてのピクセル、すべてのフレームで発生します。それはそこで進行している処理のヒープです。 – ManoDestra