AndEngineを使用してAndroid用のゲームを作成しています。 パート1

みなさんこんにちは。

今日は、 AndEngineを使用して小さなゲームを作成する方法を説明します。 群れは非常に大きく、読者を飽きさせないようにしましたが、その最初の部分について説明します。 読者に必要なのは、Java、OOP、およびEclipseとAndroid SDKを処理する能力に関する知識です。 今後は、 Mirrors MazeLaser Logicに似たものが得られます。

記事の2番目の部分。

記事の第3部。



Eclipse、Android SDKをインストールし、プロジェクトを作成し、ライブラリを接続する方法はありませんので、すぐにビジネスに取り掛かりましょう。



ステップ1:アマチュア向け。 AndEngine ソースをダウンロードして、Androidライブラリとしてプロジェクトに接続できます。 または、 から既製の.jarを使用します。 どちらの場合でも、 Mercurialが必要になりますが、これについても詳しく説明しません。

ステップ2:プロジェクトが作成され、すべてのライブラリが接続されます。 今、画像が必要です。 プロジェクトにフォルダーを作成します。



資産/ gfx



まあ、またはあなたが好きなものは何でもそこに2つの画像を投げます。 1つの背景とレーザー。

これ以上画像は必要ありません。 またね

ステップ3:さて、画像から始めたので、それらを初期化する小さなクラスを作成します。

public class Textures {



private Texture mTexture;

private TextureRegion mLaserGunTextureRegion, mBackgroundTextureRegion;



public Textures(final BaseGameActivity activity, final Engine engine) {

Log.i( "Laser Logic" , "onLoadResources" );

this .mTexture = new Texture(1024, 512,

TextureOptions.BILINEAR_PREMULTIPLYALPHA);

this .mLaserGunTextureRegion = TextureRegionFactory.createFromAsset(

this .mTexture, activity, "gfx/laser_gun.png" , 800, 0);

this .mBackgroundTextureRegion = TextureRegionFactory.createFromAsset(

this .mTexture, activity, "gfx/laser_logic_background.png" , 0, 0);

engine.getTextureManager().loadTexture( this .mTexture);

}



public TextureRegion getBackground(){

return mBackgroundTextureRegion;

}



public TextureRegion getLaserGun(){

return mLaserGunTextureRegion;

}



}




* This source code was highlighted with Source Code Highlighter .








このコードで何が起こっていますか? まず、mTextureを作成します。これがアトラスになります。 OpenGLは他のテクスチャサイズを認識しないため、その寸法が2の倍数であることが非常に重要です。 次に、アトラスに画像を追加します。 そして、それらが交差しないことを注意深く監視します。 透明な背景はレーザーにとって非常に重要なので、とにかくPNGを使用します。 また、バックグラウンドでは、どの形式で保存するかは重要ではありません。 さて、すべての操作の後、loadTexture()メソッドを呼び出します。その後、アトラスを使用できます。



ステップ4:テクスチャをロードしました。次に、取得したものを見てみましょう。



public class StageActivity extends BaseGameActivity {



private static final int CAMERA_WIDTH = 800;

private static final int CAMERA_HEIGHT = 480;

private static final int NUMBER_OF_LAYERS = 2;



private Camera mCamera;

private Textures mTextures;



@Override

public void onLoadComplete() {}



@Override

public Engine onLoadEngine() {

this .mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

final EngineOptions options = new EngineOptions( true ,

ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(

getScreenResolutionRatio()), this .mCamera);

return new Engine(options);

}



@Override

public void onLoadResources() {

mTextures = new Textures( this , getEngine());

}



@Override

public Scene onLoadScene() {

Ln.i( "OnLoadScene" );

this .mEngine.registerUpdateHandler( new FPSLogger());



final Scene scene = new Scene(NUMBER_OF_LAYERS);

scene.setBackground( new SpriteBackground( new Sprite(0, 0, mTextures

.getBackground())));

scene.getFirstChild().attachChild( new Sprite(0, 0, mTextures.getLaserGun()));

return scene;

}



private float getScreenResolutionRatio() {

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

return (( float ) dm.widthPixels) / (( float ) dm.heightPixels);

}



}




* This source code was highlighted with Source Code Highlighter .






これが私たちのメインアクティビティです。それが何であるかを説明する必要がないことを望みます。BaseGameActivityからすぐに継承する必要があります。そうしないと、成功しません。 その後、IDEは4つのメソッドをオーバーライドすることを提案します。 onLoadEngine-> onLoadResources-> onLoadScene-> onLoadCompleteの順に呼び出されます。 チェーンの最初から始めましょう。ここではカメラとエンジン自体を初期化します。 getScreenResolutionRatio()メソッドに特に注意を払いたいです。 彼のおかげで、結果の画像は全画面に拡大されます。 この場合、プロポーションは尊重されません。 または、カメラの比率をそのままにしておくと、一部のデバイスでゲームが画面全体を占有しなくなります。 もちろん、3番目のオプションがあります-すべての画面サイズの初期化を記述することですが、もちろん、今はこれを行いません。



次に、テクスチャをロードし、onLoadSceneで使用します。 FPSLogger-フレームレートをログに出力します。 そしてscene.getFirstChild()の奇妙な構造は、シーンの最上層へのリンクを返します。 もちろん、最上位のレイヤーをシーンに直接追加することなく行うことができますが、オブジェクトを追加するレイヤーを知ることはさらに便利です。

これで、何が起こったのかがわかります。





最初の部分で十分です。 プロジェクトコードはSourceForgeで見つけることができます。

ご清聴ありがとうございました。



All Articles