AndEngine背景显示为三角形

时间:2012-08-17 19:07:15

标签: android andengine

我是AndEngine的新手,我正试图在this tutorial之后实施hanoi游戏。 在将背景图像插入gfx文件夹并设置所有onCreateResources代码和onCreateScene代码后,我尝试运行该应用程序,我所能看到的是一个代表我的背景图像的三角形,如this image中所示。

enter image description here

这是我的代码:

    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级别(已尝试16,15)重新创建Android虚拟设备
  5. 另外,AndEngine论坛中有一个主题,this one我没有找到答案。

5 个答案:

答案 0 :(得分:1)

试试这个

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

代替

myCamera = new Camera(800, 480, CAMERA_WIDTH, CAMERA_HEIGHT);

答案 1 :(得分:1)

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

无论如何,你的Camera构造函数非常奇怪,你想要实现的目标是什么?通常的参数如driver613所述。此外,您似乎交换了CAMERA_WIDTH和CAMERA_HEIGHT的值。如果我没有弄错的话,Android会处理设备方向,以便宽度真正对应于设备当前方向的宽度。

答案 2 :(得分:1)

部分问题可能在这里

public void onCreateResources(
        OnCreateResourcesCallback pOnCreateResourcesCallback)

您永远不会致电pOnCreateResourcesCallback - 您应该在OnCreateResources方法结束时这样做。

答案 3 :(得分: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,       新的RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT),myCamera);

3)要加载BitmapTexture,您应该使用BitmapTextureAtlasTextureRegionFactory

例如,

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();

答案 4 :(得分:0)

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