IDEとしてBlueJを使用してJavaを使用してシンプルなプラットフォームゲームを開発しています。現時点では、ゲーム内にプレイヤーや敵のスプライト、プラットフォーム、その他のアイテムをポリゴンとシンプルな図形を使用して描画しています。それらを実際の画像に置き換えます。
今のところ、ゲームウィンドウ/キャンバスの「背景」として画像(URLまたはローカルソースから)を設定する最も簡単な解決策は何ですか?
プログラミングスキルがあまり良くないので、長くも複雑でもなければ、プログラムをできるだけシンプルに保ちたいと思います。サンプルコードにコメントを付けて機能を詳しく説明し、それが独自のクラスにある場合は、他のクラスで使用される関連メソッドを呼び出す方法を提供してください。
どうもありがとうございました。
答えは、アプリケーションまたはアプレットが [〜#〜] awt [〜#〜] または Swing のいずれを使用しているかによって若干異なります。
(基本的に、J
やJApplet
などのJFrame
で始まるクラスはSwingであり、Applet
とFrame
はAWTです。
どちらの場合でも、基本的な手順は次のとおりです。
Image
オブジェクトに画像を描画またはロードします。Component
のペインティングイベントで背景画像を描画します。ステップ1.イメージのロードは、 Toolkit
クラスを使用するか、 ImageIO
クラスを使用します。
Toolkit.createImage
メソッドを使用して、Image
で指定された場所からString
をロードできます。
Image img = Toolkit.getDefaultToolkit().createImage("background.jpg");
同様に、ImageIO
を使用できます。
Image img = ImageIO.read(new File("background.jpg");
ステップ2.背景を取得するComponent
のペイントメソッドをオーバーライドし、Image
をコンポーネントにペイントする必要があります。
AWTの場合、オーバーライドするメソッドは Paint
メソッドであり、 drawImage
メソッドに使用される Graphics
オブジェクトに渡されるPaint
メソッド:
public void Paint(Graphics g)
{
// Draw the previously loaded image to Component.
g.drawImage(img, 0, 0, null);
// Draw sprites, and other things.
// ....
}
Swingの場合、オーバーライドするメソッドは、 paintComponent
の JComponent
メソッドであり、AWTで行われたのと同様にImage
を描画します。
public void paintComponent(Graphics g)
{
// Draw the previously loaded image to Component.
g.drawImage(img, 0, 0, null);
// Draw sprites, and other things.
// ....
}
単純なコンポーネントの例
これは、インスタンス化されたときに画像ファイルをロードし、その画像を自身に描画するPanel
です:
class BackgroundPanel extends Panel
{
// The Image to store the background image in.
Image img;
public BackgroundPanel()
{
// Loads the background image and stores in img object.
img = Toolkit.getDefaultToolkit().createImage("background.jpg");
}
public void Paint(Graphics g)
{
// Draws the img to the BackgroundPanel.
g.drawImage(img, 0, 0, null);
}
}
ペイントの詳細:
最初に、WorldView
クラスを拡張する新しいクラスを作成します。新しいクラスBackground
を呼び出しました。したがって、この新しいクラスでは、paintBackground
メソッドをオーバーライドするために必要なすべてのJavaパッケージをインポートします。これは次のようになります。
_import city.soi.platform.*;
import Java.awt.Graphics2D;
import Java.awt.Image;
import Java.awt.image.ImageObserver;
import javax.swing.ImageIcon;
import Java.awt.geom.AffineTransform;
_
次に、クラス名の後に、WorldView
を拡張することを確認します。このようなもの:
_public class Background extends WorldView
_
次に、タイプGame
の変数gameとタイプImage
の画像変数を次のように宣言します。
_private Game game;
private Image image;
_
次に、このクラスのコンストラクターで、タイプGame
のゲームがコンストラクターのシグネチャ内にあり、super
の呼び出しでWorldView
を初期化する必要があることを確認します。 、ゲームを初期化し、画像変数を次のように初期化します。
_super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight());
this.game = game;
bg = (new ImageIcon("lol.png")).getImage();
_
次に、paintBackground
クラスのPaint
メソッドをオーバーライドするときとまったく同じ方法で、Player
メソッドをオーバーライドします。ちょうどこのような:
_public void paintBackground(Graphics2D g)
{
float x = getX();
float y = getY();
AffineTransform transform = AffineTransform.getTranslateInstance(x,y);
g.drawImage(bg, transform, game.getView());
}
_
最後に、Game
クラスで作成したばかりの新しいクラスへのクラスレベルの参照を宣言し、Game
コンストラクターでこれを初期化する必要があります。
_private Background image;
And in the Game constructor:
image = new Background(this);
_
最後に、フレームに背景を追加するだけです!それが私たち全員が行方不明だったと確信していることです。これを行うには、変数frame
が宣言された後、次のような操作を行う必要があります。
_frame.add(image);
_
frame.pack();
の直前にこのコードを追加してください。また、大きすぎない背景画像を使用してください!
これで終わりです!ゲームエンジンはJPEGおよびPNG画像形式を処理できますが、他の形式もサポートできることに気付きました。これはゲームに背景画像を含めるのに役立ちますが、完璧ではありません!次のレベルに進むと、すべてのプラットフォームとスプライトが非表示になり、ゲームに含まれている背景画像とJLabels/Jbuttonのみが表示されるためです。
<script>
function SetBack(dir) {
document.getElementById('body').style.backgroundImage=dir;
}
SetBack('url(myniftybg.gif)');
</script>
またはこれを試してください;)
try {
this.setContentPane(
new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg")))));
} catch (IOException e) {};