• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ゲーム画面(JFrame)のサイズ変更について)

ゲーム画面をリサイズする方法とは?

このQ&Aのポイント
  • ゲーム画面をリサイズする方法について考えています。JFrameを使ってノベルゲームを制作しているのですが、JFrameをリサイズできる機能を追加したいと思っています。
  • 具体的な方法としては、二つ考えています。一つはベースとなる画面をイメージとして扱い、それを伸縮してJFrameに合わせる方法です。もう一つはJFrameに合わせて画面のパーツの大きさを設定し、構築していく方法です。
  • ベースとなる画面を伸縮させる方法を採用したいと思っていますが、縦横比が崩れる場合の処理がわかりません。具体的な実現方法について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#247307
noname#247307
回答No.2

要するに、JFrameのWindow内の表示をImageとして取り出せないか、ということでしょうか。 JFrame自体は内部的にオフスクリーンバッファに表示イメージを描画していますので、どこかにイメージデータは保持しているとは思いますが、残念ながらそれを簡単に取り出すメソッドやフィールドなどは用意されていません。ですので、簡単に取り出す方法はありません。 どうしてもというなら、Robotクラスを使ってWindow内のイメージをキャプチャーする、という荒業はあります。こんな感じですね。 Robot robot = new Robot(); Rectangle captureSize = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage bufferedImage = robot.createScreenCapture(captureSize); ただ、意味がないと思いますが。既に表示の各部品をコンポーネント化し、それぞれでリサイズに対応するように設計できているようですから、それが正しいアプローチだと思います。せっかくコンポーネント化されたものを全体でひとまとめに扱うというのは、コンポーネント化に反する無意味なアプローチのように思えます。

その他の回答 (1)

noname#247307
noname#247307
回答No.1

要するに、Imageをファイルから作成する方法、ということですか。いろいろやりかたはありますが、私の場合はImageIO.readを使うやり方が一番てっとり早くて楽ですね。例えばこんな感じです。 BufferedImage img = ImageIO.read(new File("image.png")); >ゲーム画面のリサイズ処理としてこれが正しいのか これは、それぞれの設計の仕方によるでしょうから、、これが正しいというものはないように思いますよ。ただ、Swingなどは部品のコンポーネント化が進められていて、それぞれのコンポーネントごとに独立して扱えるようにするのが基本だろうと思います。 ですから、イメージを利用するにしても、画面全体を1枚の絵で貼り付けるより、例えば「メニューのパネル」「ゲームシーンのパネル」「メッセージの表示パネル」というように画面に表示される部品ごとにコンポーネント化して、それぞれの中でリサイズ時の処理などを実装していくと良いと主ますよ。

dossi
質問者

補足

回答ありがとうございます。 説明下手ですみません。ファイルからImageを作成する方法ではなく、JFrameに表示されている(みえている)画面からImageを作成する方法があるかどうかが分からないのです。 指南してくださった各コンポーネントでリサイズの処理をする・・ はたった今なんとかできました!そういう意味ではリサイズは出来るようになったわけですが、もともと目指していたのとはちょっと違います。 具体的な話をすると、背景を表示させるパネルや、メッセージを表示するパネル(JFrameの上に乗ってる子JPanel)をJFrame上に乗せて画面を構築させてます。その関係を保ったままリサイズをしたいと思っていました。例えば横にびよーんと画面を伸ばしたら画面内のパネルや文字も全部びよーんと横に歪み平ぺったくなる、という処理です。それを実現するためには文字やパネルなどの全てをイメージとして扱うことができれば手っ取り早いと思ったのです。 リサイズは出来るようになったのでこんな質問は必要ないと思われるかもしれませんが、 もしよろしければその点についてご教示願います。

関連するQ&A