Search code examples
andenginehud

What is wrong with this ANDEngine HUD?


I am trying to make a HUD at AndEngine, but when I write this code below and run the emulator, only thing appears on Emulator is a black screen with crashed HUD image.

This is what I want to display,enter image description here and This is how my code show.

enter image description here This is my code -

package com.example.andenginetester;


import org.andengine.engine.camera.Camera;
import org.andengine.engine.camera.hud.HUD;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.TextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;


public class SpriteTester extends SimpleBaseGameActivity {

	public static final int CAMERA_WIDTH = 720;
	public static final int CAMERA_HEIGHT = 480;
	
	private HUD myHUD;
	
	private Sprite myHUDSprite;
	
	private BitmapTextureAtlas myAtlas;
	private TextureRegion myHUDImage;
	final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);	
	
	@Override
	public EngineOptions onCreateEngineOptions() {


		return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
	}


	@Override
	protected void onCreateResources() {
		myAtlas = new BitmapTextureAtlas(this.getTextureManager(), 1024, 1024);
		myHUDImage = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.myAtlas, this, "gfx/HUD.png", 0, 0);
		mEngine.getTextureManager().loadTexture(myAtlas);
		
	}

	@Override
	protected Scene onCreateScene() {
		final Scene scene = new Scene();
		scene.setBackground(new Background(0, 0, 0));
		myHUDSprite = new Sprite(0, 0, myHUDImage, this.getVertexBufferObjectManager());
		
		myHUD.attachChild(myHUDSprite);
		camera.setHUD(myHUD);
		return scene;

	}
	

	
	

}

How I should fix it?


Solution

  • Well, I managed to get the correct result , let me know if it works for you:

    a) I updated the AndroidManifest.xml

    Added in the <activity ... >:

    1) android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|mcc|mnc"

    2) android:screenOrientation="landscape"

    b) The updated activity:

    public class MainActivity extends SimpleBaseGameActivity {
    
        public static final int CAMERA_WIDTH = 720;
        public static final int CAMERA_HEIGHT = 480;
    
        private HUD myHUD = new HUD();
    
        private Sprite myHUDSprite;
    
        private BitmapTextureAtlas myAtlas;
        private TextureRegion myHUDImage;
        final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    
        @Override
        public EngineOptions onCreateEngineOptions() {
    
            return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,
                    new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
        }
    
        @Override
        protected void onCreateResources() {
            myAtlas = new BitmapTextureAtlas(this.getTextureManager(), 1024, 1024);
            myHUDImage = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
                    this.myAtlas, this, "gfx/HUD.png", 0, 0);
            mEngine.getTextureManager().loadTexture(myAtlas);
    
        }
    
        @Override
        protected Scene onCreateScene() {
            final Scene scene = new Scene();
            scene.setBackground(new Background(0, 0, 0));
            myHUDSprite = new Sprite(0, 0, myHUDImage,
                    this.getVertexBufferObjectManager());
    
            myHUD.attachChild(myHUDSprite);
            myHUD.setPosition(CAMERA_WIDTH/2,CAMERA_HEIGHT/2);
            camera.setHUD(myHUD);
            return scene;
    
        }
    
    }