ゴールデンTゲームエンジン(GTGE)-最初のデート

そのため、2Dアプリケーション(Javaのゲーム)を作成する必要がありました。 スプライトをロードし、オブジェクトの衝突を処理し、タイルと背景を操作できる既製のエンジンを探す必要がありました。 これは、私が必要とする最小限の機能セットでした。 選択肢はGolden T Game Engine(GTGE) 」にありました 。 それを明確に理解したので、経験をHabrousersと共有したいと思います。

公式サイトからエンジンをダウンロードした後、プロジェクトに接続します。 次に、アプリケーションのメインクラスを作成します。 Mainと呼んでいます。 その後、エンジンの最小限のアプリケーションを作成します。
import java.awt。* ;
import com.golden.gamedev。* ;

パブリック クラス Main extends Game {
public static void main String [ ] args {
GameLoader game = new GameLoader ; //アプリケーションの初期化を制御するクラス
ゲーム。 セットアップ 新しい Main 新しい Dimension 640、480 false ; //グラフィックエンジンを初期化します
ゲーム。 開始 ;
}

@Override
public void initResources {
//ゲーム変数とリソースを初期化します
}

@Override
public void render Graphics2D g {
//グラフィックレンダリング
}

@Override
パブリック ボイドアップデート ロング経過時間 {
//変数とリソースの更新
}
}

これで開始できます。 GTGEロゴとFPSカウンターを含むウィンドウが表示されます。 しかし、写真は更新されません。 簡単に言えば、互いに重ね合わせます。 これは、 FPSカウンターを見るとわかります。 次に、競技場を背景で初期化する必要があります。 背景として、任意のRGBカラー、画像を使用できます。 競技場とは何ですか? 競技場は、グラフィックをレンダリングするためのプラットフォームです。 競技場とそれに続く背景を作成するには、さらにいくつかのファイルを接続する必要があります。
import com.golden.gamedev.object。* ;
import com.golden.gamedev.object.background。* ;

競技場(プレイフィールド) -クラスです。 ただし、オブジェクトを作成する前に、背景を初期化する必要があります。 この場合、白一色になります。 Mainクラスの冒頭で、次のように記述します。
バックバック= 新しい ColorBackground 新しい 255、255、255 ;

次に、競技場を作成します。 バックグラウンドを初期化した直後に、次のように記述します。
PlayField pf = new PlayField back ;

PlayFieldクラスのコンストラクターの引数の1つはバックグラウンドで、デフォルトでインストールされます。 そして最後に、最も重要なことは、遊び場の更新とレンダリングです。
グラフィックスレンダリング関数で、次のように記述します。
pf。 レンダー g ;

そして、更新機能で-
pf。 更新 lapsedTime ;

実行できます。 何が見えますか? 白い空の競技場。 何かが欠けています。 次に、矢印で制御されるゲームオブジェクトを作成します。
プレイグラウンドにスプライトを描画するには、まずスプライトを読み込んでスプライトグループに配置する必要があります。 今からやります。 スプライトグループアップロードされた画像、そして実際にはスプライト自体を担当する3つの変数が必要です。
クラスの最初にこれらの変数を宣言します。
SpriteGroup spr_group ;
BufferedImage spr_buffer ;
スプライトspr_player ;

次に、ファイルを接続して写真をアップロードします。
import java.awt.image.BufferedImage ;

これで、スプライトをロードするためのすべてが完全に動作可能になりました。 「主人公」としてこの写真を選びました。
画像
スプライトをロードして遊び場に配置する方法は? まず、スプライト用のグループが必要です。 このグループは、すべてのスプライトを便利に保管するために必要です。 グループごとに、 N番目のスプライトを指定できます。 各スプライトを個別に操作するよりも、グループを操作する方がはるかに便利です。 グループを作成したら、写真をアップロードする必要があります。 次に、スプ​​ライトオブジェクトを作成し、ダウンロードした画像を割り当てます。 次に、このスプライトをグループに追加し、グループをプレイグラウンドに配置します。
上記を実行できるコードは次のとおりです(画像の読み込みはリソース初期化関数内にのみある必要があります!したがって、スプライトおよび同様の関数の作成をこの関数に転送しました)
//スプライトグループを作成します
spr_group = new SpriteGroup "grp_player" ;
//画像をアップロードします
spr_buffer = getImage "plane1.png" ;
//プレーヤースプライトを作成します
spr_player = new Sprite spr_buffer、 100、100 ;
//プレーヤーのスプライトをグループに追加します
spr_group。 追加 spr_player ;
//スプライトのグループを遊び場に置きます
pf。 addGroup spr_group ;

今、あなたはゲームを開始し、そこで何が起こったのかを見ることができますか? 競技場にスプライトがあります。 それを管理する方法を「学ぶ」といいでしょう。 これのために何をしていますか?
スプライトオブジェクトへのリンクがあります。 このオブジェクトには、関数moveXおよびmoveYがあります。 したがって、それらを操作します。
キーストロークを処理するには、次のファイルを含める必要があります。
import java.awt.event.KeyEvent ;

更新機能で、以下を記述します。
if keyDown KeyEvent。VK_W spr_player。 moveY -3 ;
if keyDown KeyEvent。VK_S spr_player。 moveY 3 ;
if keyDown KeyEvent。VK_A spr_player。 moveX -3 ;
if keyDown KeyEvent。VK_D spr_player。 moveX 3 ;

これで、メインキャラクターを制御できます。

アニメーション

次に、アニメーションの読み込みについて説明します。 アニメーションには、次のスプライトを使用します。
画像
アニメーション化されたスプライトを作成するには、特別な関数getImage sを使用して画像をロードする必要があります。 複数のフレームで構成される画像として、各フレームを個別にアップロードできます。 以下に2つの小さな例を示します。
例1:
BufferedImage [ ] aspr_buffer = getImages "plane2.png"3、1 ;

例2:
BufferedImage [ ] aspr_buffer = {
getImage "plane1.png"
getImage "plane2.png"
getImage "plane3.png"
} ;

最初の例では、1つの画像をアップロードし、関数は既にそれを別のフレームにカットしています。 関数の最初の引数は、画像へのパスです。 2番目は水平方向のフレーム数、3番目の引数は垂直方向のフレーム数です。 ここではすべてが簡単です。 実際、最初の例の関数は2番目の例と同じことを行います。
2番目の例では、配列を作成し、1つの画像をそこに読み込みます。
この画像のスプライトを作成するには、アニメーション化されたスプライトのオブジェクトを作成する必要があります。
aspr_player = new AnimatedSprite aspr_buffer、 100、100 ;

このオブジェクトには多くの機能があります。 主なものについて、詳細に説明します。
//関数はタイマーオブジェクトへの参照を返します
aspr_player。 getAnimationTimer ;

アニメーションの速度を変更するには、タイマーをオンにする必要があります。 これは上記の機能によって行われます。 次に、 setDelay関数を呼び出します。 この関数の引数は数値-スプライトフレームの変更間のミリ秒数です。
aspr_player。 getAnimationTimer setDelay 100 ;

各フレームは100ミリ秒後に変更されます。
アニメーションスプライトのフレーム数を変更するには、 setAnimationFrame関数を呼び出す必要があります
例:
aspr_player。 setAnimationFrame 0 、aspr_buffer。length - 1 ;

最初の引数は最初のフレームで、2番目は最後のフレームです。 最後のフレーム- ダウンロードされたイメージを含む配列内の要素数-1 。 したがって、スプライト内のフレームのシーケンスを変更できます。
setAnimate関数を使用すると、スプライトアニメーションを有効または無効にできます
//アニメーションオン
aspr_player。 setAnimate true ;

また、 setLoopAnim関数を使用して、フレームの「 ループ 」を変更できます 。 つまり アニメーションの終了後、停止することはありませんが、自動的に再開します。
aspr_player。 setLoopAnim true ;

メインの例に戻りましょう。
画像を読み込んでスプライトを作成するためのコードを変更します
aspr_buffer = getImages "plane2.png"3、1 ;
aspr_player = new AnimatedSprite aspr_buffer、 100、100 ;
aspr_player。 getAnimationTimer setDelay 80 ;
aspr_player。 setAnimationFrame 0 、aspr_buffer。length - 1 ;
aspr_player。 setAnimate true ;
aspr_player。 setLoopAnim true ;
spr_group。 追加 aspr_player ;

そして、クラスの最初で、いくつかの変数を宣言します:
BufferedImage [ ] aspr_buffer ;
AnimatedSprite aspr_player ;

また、スプライトの動きを
if keyDown KeyEvent。VK_W aspr_player。 moveY -2 ;
if keyDown KeyEvent。VK_S aspr_player。 moveY 2 ;
if keyDown KeyEvent。VK_A aspr_player。 moveX -2 ;
if keyDown KeyEvent。VK_D aspr_player。 moveX 2 ;

これで実行して確認できます。 遊び場には、「回転ブレード」を備えた航空機のスプライトがあります。

これで、 Golden T Game Engineの最初の知り合いを終了します。 これは私がお話ししたいことのすべてではありませんが、この投稿はすでにかなり大きなものでした。 この記事を読んでくれてありがとう。

記事を書くために、私エンジンの公式ウェブサイトからの情報を使用しました。
例へのリンク。

Source: https://habr.com/ru/post/J130115/


All Articles