OGEngine之多分辨率支持策略和原理

对于AndEngine的屏幕适配,通常使用RatioResolutionPolicy来拉伸屏幕,但是当游戏分辨率与手机分辨率的宽高比例不一致的时候,就不可避免的出现部分的黑色区域,影响游戏体验,目前OGengine开源引擎已经解决了该问题,可以达到满屏自适应屏幕

游戏设计分辨率:

我们自己定义游戏的分辨率是多少(例如800×480),然后UI根据这个分辨率来进行绘图

手机屏幕分辨率:手机自身屏幕的分辨率

期望分辨率=游戏设计分辨率

实际分辨率=手机屏幕分辨率

首先确定是横屏游戏还是竖屏游戏,假设手机是320×480,是竖屏游戏,并且游戏设计分辨率是480×800

举例:以保持宽不变,高适配。假设UI给的图是480×800

屏幕宽高比=实际分辨率宽(320)/实际分辨率高(480)=期望分辨率宽(480)/期望分辨率高

我们可以得到期望分辨率高等于720,因为UI给图的高是800,那么空出来那80=800-720部分就是图中没有阴影的那一部分。


在手机显示效果图如下



以下是相关代码

  1. @Override

  2. protectedPixelPerfectEngineOptions onCreatePixelPerfectEngineOptions() {

  3.         PixelPerfectEngineOptionspixelPerfectEngineOptions=

  4.                         new PixelPerfectEngineOptions(this,ZoomCamera.class);

  5.         pixelPerfectEngineOptions.setDesiredSize(800);

  6.         pixelPerfectEngineOptions

  7.                         .setScreenOrientation(ScreenOrientation.LANDSCAPE_FIXED);

  8.         pixelPerfectEngineOptions

  9.                         .setPixelPerfectMode(PixelPerfectMode.CHANGE_HEIGHT);

  10.         returnpixelPerfectEngineOptions;

  11. }

复制代码

  1. public EngineOptions createEngineOptions() {

  2.         float[] screenSize = this.getScreenSize();

  3.         float screenWidth = screenSize[0];

  4.         float screenHeight = screenSize[1];

  5.         float screenRatio = screenWidth / screenHeight;

  6.         float cameraWidth = this.mDesiredSize;

  7.         float cameraHeight = this.mDesiredSize;

  8.         if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_WIDTH) {

  9.                 cameraWidth = this.mDesiredSize * screenRatio;

  10.         } else if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_HEIGHT) {

  11.                 cameraHeight = this.mDesiredSize / screenRatio;

  12.         }

  13.         Class<?>[] parameterTypes = { float.class, float.class, float.class,float.class };

  14.         Object[] argParam = { 0.0f, 0.0f, cameraWidth, cameraHeight };

  15.         Camera camera = ReflectionUtils.newInstance(this.mCameraCls,

  16.                 parameterTypes, argParam);

  17.         EngineOptions engineOptions = new EngineOptions(true,

  18.                 this.mScreenOrientation, new FillResolutionPolicy(), camera);

  19.         engineOptions.getTouchOptions().setNeedsMultiTouch(true);

  20.         engineOptions.getAudioOptions().setNeedsSound(true);

  21.         engineOptions.getAudioOptions().setNeedsMusic(true);

  22.         engineOptions.getRenderOptions().setDithering(true);

  23.         return engineOptions;

  24. }

复制代码


你可能感兴趣的:(安卓,程序,手游,开发引擎)