2017-02-09 17 views
1

私はユニ・コースワークのためにJavax.swingライブラリを使ってゲームを作成しています。 私はウィンドウを作成しました。ゲームマップを手続き的に生成するコードを書いています。JPanelでグラフィックの位置を移動する方法

ただし、地図のフォーカスを変更できません。私の言うことは、地図が常に画面の一角にくっついていることです。 (IE:Locationは0,0に設定されているので、Graphics g(マップ)は外側に移動します)

「カメラ」を移動して、地図はプレーヤーが見ることができます。

ベロー私はマップを画面に描画する方法を貼り付けました。実行時にカメラを動かすために何ができるか教えてもらえますか? AKA:マップを左右にシフトします。

私はマップを保持するGraphicsオブジェクトを持っていると思っていましたが、そのGraphicsオブジェクトのサブイメージを描画しましたが、マップがフレームごとにどのように再描画されるか(アニメーション目的で)再描画するためのグラフィックスがさらに必要になります。 マップは、この問題を解決する最良/最も簡単な方法は、あなたのJPanelの周りにJScrollPaneを入れて、JPanelのあなたのイメージのサイズにすることです6400個の* 6400ピクセル

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    try { 
     for(int x = 0; x < OverworldMap.MAP_X_SIZE; x++){ 
      for(int y = 0; y < OverworldMap.MAP_Y_SIZE; y++){ 
       for(int layer = 0; layer < OverworldMap.MAP_LAYER_SIZE; layer++) { 
        g.drawImage(OverworldMap.getTileAt(x, y, layer).getSprite(), x * SPRITE_SIZE, y * SPRITE_SIZE, null); 

       } 
      } 
     } 
    } catch (Exception e) { 
     LauncherClass.printErrorLog(e); 
    } 
} 
+1

1)よりよいヘルプについてはすぐに、[MCVE]を投稿したり、 [短い、自己完結型、正しい例](http://www.sscce.org/)。 2)レイアウトマネージャにサイズを示唆するために、カスタムペイントをコンポーネントに適用するときは、 'getPreferredSize()'メソッドをオーバーライドしてください。 –

+0

[this](http:// stackoverflow .com/questions/16050723/java-applet-game-2d-window-scrolling/16052048#16052048)?あなたは、世界の「仮想」と世界の「物理的」という2つの概念を区別しなければなりません。考え方は、物理的な「ウィンドウ」を「仮想」ビューの上に重ねて、必要に応じて小さな部分を見ることができるようにしたいということです。 – MadProgrammer

答えて

2

です。画像の正しい部分を再ペイントすることだけを心配する必要はありません。Javaは、画面上にある部品を描画することに関してはかなりスマートです。スクロールバーを表示または非表示にすることはできますが、スクロールバーを非表示にすると、スクロールを有効にするロジックを追加する必要があります。

+0

私はそれをどのように正確に行いますか?私はJScrollPaneを他のいくつかのプロジェクトの前に使用しようとしましたが、それが動作するように設定する方法を決して決めることはできませんでした。主に、私は新しいJPane()を追加するか(新しいJScrollPane())、新しいJScrollPane(新しいJPane())をしなければならないか分かりません。 JPaneオブジェクト参照をパラメータとしてJScrollPaneオブジェクトを作成し、JaneにJScrollPaneオブジェクトを追加しようとすると、IDEはそのオブジェクトが既にJPaneのコンポーネントであると警告しました。今、私がそれらのうちの1つだけをしたとき、スクロールバーは現れなかった。 – Alexz

+0

スクロールペインの使い方を参照してください。http://java.sun.com/docs/books/tutorial/uiswing/components/scrollpane.html強調するべき点の1つは、JPanelのサイズを自分で設定する必要があることです(「コンポーネント」を参照)。 – ControlAltDel

0

グラフィックスオブジェクトを保存して後で使用することはできません。これは、渡されるペイントメソッドの持続時間に対してのみ有効です。

あなたは、しかし、単にあなたの絵を相殺することができます

Image sprite = OverworldMap.getTileAt(x, y, layer).getSprite(); 
g.drawImage(sprite, x * SPRITE_SIZE - playerX, y * SPRITE_SIZE - playerY, this); 

(。のdrawImageの最後の引数はthisでなければならないことに注意してください)

+0

スプライトを負の(x、y)座標で描くことは違法ではありませんか? – Alexz

+0

それは全く違法ではありません。実際、描画システムは、出力が完全に見えない描画メソッドを単純に無視するほどスマートです。 – VGR

関連する問題