Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sprite size on different screen size Andengine Android

` I am developing my first game in Android Adnengine. It's a racing game from top view. I used parallax background and some cars. I tested it on my device which is of smaller width and height.

I placed the cars of with 32 and height 64 according to the camera width, height. It is working fine with my screen size but on larger screen sizes, like the Galaxy Tab, there is a huge space left behind in the game, because cars sizes remain the same as I have to use them in the power of two.

How can I use images that fit all screen sizes? Do I have to use different images according to the image size with different camera width and height? I am sure there is a solution for this.

I already modified my manifest file to support small, large and xlarge sizes.

  public Engine onLoadEngine() {

    final Display display = getWindowManager().getDefaultDisplay();
    CAMERA_WIDTH = display.getWidth();
    CAMERA_HEIGHT = display.getHeight();

    //Toast.makeText(getApplicationContext(), CAMERA_WIDTH, 3);

    mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    engine = new Engine(new EngineOptions(true,
            ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(
                    CAMERA_WIDTH, CAMERA_HEIGHT), mCamera).setNeedsMusic(
            true).setNeedsSound(true));

    return engine;
}
like image 904
sheraz amin Avatar asked Jul 09 '12 16:07

sheraz amin


2 Answers

The thing about using a ratio resolution policy is that you can design your game to a particular size say 800x480 which is very popular for phones these days.

I think where most people stray is thinking they need to pull the current Display width/height and use that to initialize the engine.

The point of a ratio resolution policy - as I understand it - is you set your dimensions to hard coded values and let the ratio resolution policy handle the differences from one device to the next.

CAMERA_WIDTH = 800;
CAMERA_HEIGHT = 480;

//Toast.makeText(getApplicationContext(), CAMERA_WIDTH, 3);

mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
engine = new Engine(new EngineOptions(true,
        ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(
                CAMERA_WIDTH, CAMERA_HEIGHT), mCamera).setNeedsMusic(
        true).setNeedsSound(true));

Once you do things like this, then you only need to be sure your graphics and spacing look good at your pre chosen width/height - in this example 800 x 480. If everything works and fits and looks good, then the ratio resolution policy will take care of things when the device has a different screen size.

At least that my take on how it should work - I write for 800 x 480 and everything looks good on my 7" tablet too - granted that's not a major stretch.

like image 74
jmroyalty Avatar answered Nov 01 '22 22:11

jmroyalty


Fetch the height of the device and width and then algebraically make the sprite a percentage of the screen width and height.

Hope that helps.

like image 26
user1432813 Avatar answered Nov 01 '22 22:11

user1432813