1

何かを始める前に調査を行うのは良い考えなので、プロジェクトを始める前に Stackverflow の記事をここで見てきました。

タイルマップを調べていると、他の質問の 1 つが Java チュートリアルの 1 つ、具体的にはこのページ ( http://docs.oracle.com/javase/tutorial/uiswing/painting/step3.html ) につながります。 、 これ:

private void moveSquare(int x, int y) {
    int OFFSET = 1;
    if ((squareX!=x) || (squareY!=y)) {
        repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        squareX=x;
        squareY=y;
        repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
    } 
}

ペイントが呼び出されたときに何が起こっているのかわからない人のために、squareX、squareY で赤い四角形が描画されます。これは、squareX と squareY を変更できるメソッドであり、Java に領域を制限するように指示することで再描画プロセスを高速化します。古い場所と新しい場所だけに再描画する (これが再描画の 2 つの呼び出しです)

これは私が使用すべきもののように聞こえますが、タイルが更新されると座標が再描画されますが、タイルマップは通常 2 次元配列を含み、描画時に配列全体をループします。再描画されないため、速度が低下する可能性があります。

そのため、最後にすべてが描画されてから外観が異なる何かが変更されたかどうかを示すフラグをタイルに追加し、変更されたタイルの画像のみを配置します。

これは、グラフィックスが描画されるウィンドウのようなものが最小化/最大化サイクルを経るまではうまく機能します。今度はすべてのタイルでグラフィックスを更新する必要がありますが、そのようにフラグが立てられるものはなく、結果として空白の画面になります。

これを処理する最善の理由は何ですか?

そして、他に何を見逃しましたか?

4

1 に答える 1