4

andengineを使用して開発している簡単なゲームのメニュー ページに bg を設定しました。

私はbgを次のように設定しました

public class MenuActivity extends SimpleBaseGameActivity implements
    IOnMenuItemClickListener {

private static int CAMERA_WIDTH = 480;
private static int CAMERA_HEIGHT = 800;

private Camera mCamera;
private ITextureRegion mBackgroundTextureRegion;

protected static final int MENU_RESET = 0;
protected static final int MENU_QUIT = MENU_RESET + 1;
private Font mFont;
protected MenuScene mMenuScene;

private Scene mScene;


@SuppressWarnings("deprecation")
@Override
public EngineOptions onCreateEngineOptions() {
    final Display display = getWindowManager().getDefaultDisplay();

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

    return new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED,
            new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
            this.mCamera);
}

@Override
protected void onCreateResources() {
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");


    try {
        ITexture backgroundTexture = new BitmapTexture(
                this.getTextureManager(), new IInputStreamOpener() {
                    @Override
                    public InputStream open() throws IOException {
                        return getAssets().open("gfx/bg3.png");
                    }
                });
        backgroundTexture.load();
        this.mBackgroundTextureRegion = TextureRegionFactory
                .extractFromTexture(backgroundTexture);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

@Override
protected Scene onCreateScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());
    this.mScene = new Scene();
    Sprite backgroundSprite = new Sprite(0, 0,
            this.mBackgroundTextureRegion, getVertexBufferObjectManager());
    // this.mScene.attachChild(backgroundSprite);
    this.mScene.setBackground(new SpriteBackground(backgroundSprite));


    return this.mScene;
}

また、背景が画面に収まらず、左端と右端の両方に空白があります。これを解決する方法は?

4

1 に答える 1

10

BaseResolutionPolicy は、さまざまな要因に基づいて、AndEngine がアプリケーションの表示幅と高さを処理する方法を決定します。

FillResolutionPolicy: FillResolutionPolicy クラスは、単にアプリケーションがディスプレイの幅と高さをすべて占有するようにしたい場合の典型的な解像度ポリシーです。シーンがディスプレイの利用可能なサイズをすべて占有するために、顕著なストレッチが発生する場合があります。

FixedResolutionPolicy: FixedResolutionPolicy クラスを使用すると、デバイスのディスプレイのサイズや Camera オブジェクトのサイズに関係なく、アプリケーションに固定のディスプレイ サイズを適用できます。このポリシーは、new FixedResolutionPolicy(pWidth, pHeight) を介して EngineOptions に渡すことができます。ここで、pWidth はアプリケーションのビューがカバーする最終的な幅を定義し、pHeight はアプリケーションのビューがカバーする最終的な高さを定義します。

RatioResolutionPolicy: RatioResolutionPolicy クラスは、スプライトの歪みを発生させずに最大表示サイズを取得する必要がある場合の解像度ポリシーに最適です。一方、多くのディスプレイ サイズにまたがる幅広い Android デバイスがあるため、一部のデバイスでは、ディスプレイの上下または左右に「黒いバー」が表示される可能性があります。

RelativeResolutionPolicy:これは最終的な解決ポリシーです。このポリシーにより、1f がデフォルト値であるスケーリング係数に基づいて、アプリケーション ビュー全体に拡大縮小を適用できます。

したがって、全画面表示が必要な場合は、次のように FillResolutionPolicy を使用します。

EngineOptions engineOptions = new EngineOptions(true,
ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(),
mCamera);
于 2013-08-13T05:42:55.180 に答える