3

我是 AndEngine 的新手,我正在尝试按照本教程实现 hanoi 游戏。将背景图像插入 gfx 文件夹并设置所有 onCreateResources 代码和 onCreateScene 代码后,我尝试运行该应用程序,我所看到的只是一个代表我的背景图像的三角形,正如您在这张图片中看到的那样。

在此处输入图像描述

这是我的代码:

    final int CAMERA_WIDTH = 480;
    final int CAMERA_HEIGHT = 800;

    public EngineOptions onCreateEngineOptions() {
        myCamera = new Camera(800, 480, CAMERA_WIDTH, CAMERA_HEIGHT);

        return new EngineOptions(false, ScreenOrientation.PORTRAIT_SENSOR,
                new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
                myCamera);
    }
    public ITextureRegion texture;

    public void onCreateResources(
            OnCreateResourcesCallback pOnCreateResourcesCallback)


        throws Exception {
            try {

                // 1 - Set up bitmap textures
                ITexture backgroundTexture = new BitmapTexture(
                        this.getTextureManager(), new IInputStreamOpener() {
                            public InputStream open() throws IOException {
                                return getAssets().open("gfx/background.png");
                            }
                        });
     // 2 - Load bitmap textures into VRAM
                backgroundTexture.load();
    // 3 - Set up texture regions
                this.mBackgroundTextureRegion = TextureRegionFactory
                        .extractFromTexture(backgroundTexture);

         }

public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
            throws Exception {

        // 1 - Create new scene
        final Scene scene = new Scene();
        Sprite backgroundSprite = new Sprite(0, 0, this.mBackgroundTextureRegion, getVertexBufferObjectManager());
        scene.attachChild(backgroundSprite);
    }

由于我尝试自己解决此错误,因此我已经尝试过:

  1. 设置相机 FillResolutionPolicy(),对结果没有影响。
  2. 将背景创建为 BitmapTextureAtlas,BitmapTextureAtlasTextureRegionFactory.createFromAsset
  3. 调用 mEngine.getScene().setBackground 而不是 attachChild
  4. 使用其他 API 级别重新创建 Android 虚拟设备(尝试 16、15)

此外,AndEngine 论坛中有一个帖子,我在这个帖子找不到我的答案。

4

5 回答 5

1

试试这个

myCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

反而

myCamera = new Camera(800, 480, CAMERA_WIDTH, CAMERA_HEIGHT);
于 2012-08-18T05:49:42.520 回答
1

对我来说,这看起来像是一些 OpenGL 问题。看看 RenderOptions,你可以通过调用来获得它们,engineOptions.getRenderOptions();在那里你可以调整各种渲染选项。

无论如何,你的 Camera 构造函数很奇怪,你想通过它来完成什么?常用参数如driver613所说。此外,您似乎交换了 CAMERA_WIDTH 和 CAMERA_HEIGHT 的值。如果我没记错的话,Android 会处理设备方向,以便宽度真正对应于设备当前方向的宽度。

于 2012-08-20T11:17:23.057 回答
1

部分问题可能在这里

public void onCreateResources(
        OnCreateResourcesCallback pOnCreateResourcesCallback)

你永远不会调用pOnCreateResourcesCallback- 你应该在你的OnCreateResources方法结束时这样做。

于 2012-08-20T13:23:13.620 回答
1

您的代码中有一些错误

1) 在 myCamera = new Camera(800, 480, CAMERA_WIDTH, CAMERA_HEIGHT); 第一个和第二个参数中是针对位置 x 和 y。所以你应该这样做

myCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

2) 在 CameraOptions 中使用

new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), myCamera);

3) 要加载您应该使用的 BitmapTextureBitmapTextureAtlasTextureRegionFactory

例如。

BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
BitmapTextureAtlas bitmapTextureAtlas = new BitmapTextureAtlas(
        getTextureManager(), width_of_image, height_of_image,
        TextureOptions.BILINEAR //Or any TextureOpion you want.
);
ITextureRegion texture = BitmapTextureAtlasTextureRegionFactory
    .createFromAsset( bitmapTextureAtlas, this, "file_name.png", x_position, y_position);

bitmapTextureAtlas.load();
于 2012-08-22T06:05:24.250 回答
0

当/如果您的 textureAtlas 太小而无法容纳所有纹理时,也会发生这种情况。检查是否所有纹理都在其中找到了位置。例如,如果您有一排 10 个 10x10 像素的纹理,而您的图集只有 90(或小于 100 像素)宽或小于 10 像素高。如果您有疑问,只需尝试足够大的尺寸,看看会发生什么:)

于 2018-06-16T20:06:05.187 回答