今日は、 AndEngineを使用して小さなゲームを作成する方法を説明します。 群れは非常に大きく、読者を飽きさせないようにしましたが、その最初の部分について説明します。 読者に必要なのは、Java、OOP、およびEclipseとAndroid SDKを処理する能力に関する知識です。 今後は、 Mirrors MazeやLaser 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で見つけることができます。
ご清聴ありがとうございました。