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;
}

而且 bg 不适合屏幕,左右两端都有一些空格。这个怎么解决,?

4

1 回答 1

10

BaseResolutionPolicy 根据各种因素决定 AndEngine 如何处理我们应用程序的显示宽度和高度:

FillResolutionPolicy: FillResolutionPolicy 类是典型的分辨率策略,如果我们只是希望我们的应用程序占据显示器的全部宽度和高度。它可能会导致一些明显的拉伸,以便我们的场景占据显示器的全部可用尺寸。

FixedResolutionPolicy: FixedResolutionPolicy 类允许我们为我们的应用程序应用固定的显示尺寸,而不管设备的显示尺寸或相机对象的尺寸如何。此策略可以通过 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 回答