
導入と準備
こんにちはhabrozhiteli。 この投稿は、サンドボックス用の私の投稿の書き直しです。 今回は、それよりも多くのことをカバーしようとします。
なぜjava
ここでは客観的なことは何も言いませんが、この言語が大好きだと言うだけで、それを書くのが好きです。 はい、JavaにはAAAクラスのゲームはありませんが、Javaは優れた機能、より多くの組み込みツール、およびより高速なコード記述を提供します。
IDE
IDEを選択することから始めましょう。 私は
Eclipseのファンであり、アドバイスをします。
何らかの理由で気に入らなかった場合は、NetBeans、Intellij IDEA、またはコマンドラインとお気に入りのエディターを使用できます。
Jdk
最新バージョンの
JDKをダウンロードします
。JDK7u4IDEのインストールに問題はほとんどありませんが、64ビットシステムをお持ちの場合は、32ビットEclipseをインストールすることをお勧めします。エラーが発生し、Eclipseが起動しない場合があるためです。
カットの下で、ゲームの作成を開始します。
ゲームクラス
そのため、プロジェクトを作成し、その中にGameクラスを作成します(同時にエントリポイントを作成します)。 このクラスは
Canvasクラスを継承し、Runnableインターフェイスを実装する必要があります。
public class Game extends Canvas implements Runnable { private static final long serialVersionUID = 1L; public void run() {
ブール型の実行変数を作成してみましょう。これは、推測したとおり、ゲームが実行されているかどうかを示します。
start()関数を作成し、その中で新しいスレッドを作成して、runningをtrueに設定します。
public void start() { running = true; new Thread(this).start(); }
更新(長いデルタ)、レンダリング()、および初期化()の3つの関数を作成しましょう。 それらの意味を理解していただければ幸いです。 run()関数で、メインゲームループを作成してから、init()を呼び出し、その中でrender()とupdate()を呼び出します。 また、フレーム間の差(デルタ時間)も計算します。
public void run() { long lastTime = System.currentTimeMillis(); long delta; init(); while(running) { delta = System.currentTimeMillis() - lastTime; lastTime = System.currentTimeMillis(); update(delta); render(); } } public void init() { } public void render() { } public void update(long delta) { }
とりあえず、render()関数に取り組みましょう。
public void render() { BufferStrategy bs = getBufferStrategy(); if (bs == null) { createBufferStrategy(2);
おそらく、開始して試すのを待つことはできませんが、急いではいけません。 フレームを作成し、それにキャンバスを追加する必要があります。 同時に、3つの変数を宣言します。
public static int WIDTH = 400;
これが 、現在のGameクラスの外観です。
スプライトクラス
新しいSpriteクラスを作成します。 このクラスは小さいので、すぐにすべてのコードにコメントを付けます:
import java.awt.Graphics; import java.awt.Image; public class Sprite { private Image image;
すぐにパフォーマンスを確認してください。 この写真を撮り、Spriteクラスのあるフォルダーにコピーします。 getSprite()関数をGameクラスに(一時的に)追加します。

public Sprite getSprite(String path) { BufferedImage sourceImage = null; try { URL url = this.getClass().getClassLoader().getResource(path); sourceImage = ImageIO.read(url); } catch (IOException e) { e.printStackTrace(); } Sprite sprite = new Sprite(Toolkit.getDefaultToolkit().createImage(sourceImage.getSource())); return sprite; }
アセットフォルダーに画像を追加し(プロジェクトのルートにフォルダーを作成します)、フォルダー自体をビルドパスに追加する必要があります。
次に、タイプSpriteのヒーロー変数を作成します。 init()関数で、それを初期化します。 render()関数で、描画します:
結果:
すべてのGame.javaコード入力
入力を処理するために、KeyAdapterを継承するクラスを作成します。
private class KeyInputHandler extends KeyAdapter { }
Gameクラスのヘッダーで2つの変数をすぐに宣言します。
private boolean leftPressed = false; private boolean rightPressed = false;
KeyInputHandlerクラス内で、2つの関数を作成します。
public void keyPressed(KeyEvent e) {
次に、init()関数で、次を追加します。
addKeyListener(new KeyInputHandler());
ヒーローのx変数とy変数を作成します(まだEntityクラスを作成していないため)。 主人公にこれらの座標を常に描画させましょう。
private static int x = 0; private static int y = 0; hero.draw(g, x, y);
そして、今度はupdate()関数で、キーが押されているかどうかを確認し、x座標を変更します。
public void update(long delta) { if (leftPressed == true) { x--; } if (rightPressed == true) { x++; } }

彼は動いています!
ご清聴ありがとうございました。
PS
githubへのリンク