2012-02-08 11 views
0

Java2Dを使用してJavaで2Dプラットフォームのゲームを開始する予定で、ワールドを作成する方法を工夫しようとしています。私はここ数時間、このことについて今まで読んできました。そして、私が理解できる限り、比較的効果的な方法は、テキストファイルに値の「行列」を入れることです。マップを作成する(2D配列に格納)。タイルマップの開始点

私の計画は、世界中の様々なテクスチャのImageIconを表示する複数のJComponentsを持つことです。 JComponentオブジェクトは、指定された配列インデックスの文字に依存します。

  1. 見落としたことはありますか?
  2. このスケマティックは背景イメージで動作しますか?つまり、空白を表す文字がある場合、背景の一部が表示されますか?

これは怠惰な質問のように見える場合は、私はそれが怠け者ではないことを保証することができます。私はコードを一緒にハッキングする前にこれを計画しようとしています。

答えて

0

魅力的な理由がない限り、各タイルに異なるコンポーネントを使用することは、おそらく良い方法ではありません。 Canvasを見て、読み込まれたイメージをその中の異なるオフセットで表示する。

例: 480×640キャンバス 128x16の画像ファイル(8枚の16x16のタイル画像が含まれています) だからあなたのファイルは、数字(文字など)の束を持って、我々は画像で8枚のタイルのための0-7を言いますよ。このファイルは、キャンバスと同じグリッド内に配置された30x40の番号を持ちます。だから、

1 2 1 3 4 8 2 ... ...

とコードを表示するためには、基本的にマップし

Graphics g = //initialize graphics; 
Image yourTileImage = //load your image; 
for (int xpos = 0; xpos < maxX; xpos++) 
    for (int ypos = 0; ; ypos < maxY; ypos++) 
     int number = //get number from map file 
     g.drawImage(Image yourTileImage, 
      xpos * 16, ypos * 16, xpos * 16 + 15, ypos * 16 + 15, 
      number*16, 0, number+15, 15, 
      ImageObserver observer) 

(テストしていない、docsに基づく)のようなものを終わりますあなたのタイル画像に番号をつけて、そのタイル画像をキャンバス(x、y)の正しい場所に置きます。*タイルのサイズ。

+0

まず、ご回答に感謝します。私はあなたがここでやっていることを見ていると、それはそう論理的な、ありがとう。しかし、私は別のコンポーネントとしてタイルを持っているつもりだったので、私は自分自身の衝突検出のためのメソッドを書くことができますまた、私は単一のオブジェクトを再描画することができます –

+0

これはImageクラスを拡張することで可能ですか? –

+0

これは、世界を表示する単なる方法です。衝突検出などは、表示されている座標の代わりに実際の座標を処理する必要があり、したがってプレゼンテーションに使用される方法とは無関係である必要があります。 JPanelを見たいawtのキャンバスの代わりに。 画面の再表示を意味する場合は、ここでキャンバス全体が更新されます。画面の一部に描画されている内容を変更できるようにするには、さらに調査する必要があります。 – Thomas

0

Javaには数多くの優れた2Dグラフィックスエンジンが用意されています。ホイールを再発明しようとするのではなく、それらの1つを使用する方が良いでしょう。 (かなり離れて何か他のものから、彼らはGPUを利用します。

あなたは簡単に何が必要ないものを見つける必要があります。

関連する問題