对于AndEngine的屏幕适配,通常使用RatioResolutionPolicy来拉伸屏幕,但是当游戏分辨率与手机分辨率的宽高比例不一致的时候,就不可避免的出现部分的黑色区域,影响游戏体验,目前OGengine开源引擎已经解决了该问题,可以达到满屏自适应屏幕
游戏设计分辨率:
我们自己定义游戏的分辨率是多少(例如800×480),然后UI根据这个分辨率来进行绘图
手机屏幕分辨率:手机自身屏幕的分辨率
期望分辨率=游戏设计分辨率
实际分辨率=手机屏幕分辨率
首先确定是横屏游戏还是竖屏游戏,假设手机是320×480,是竖屏游戏,并且游戏设计分辨率是480×800
举例:以保持宽不变,高适配。假设UI给的图是480×800
屏幕宽高比=实际分辨率宽(320)/实际分辨率高(480)=期望分辨率宽(480)/期望分辨率高
我们可以得到期望分辨率高等于720,因为UI给图的高是800,那么空出来那80=800-720部分就是图中没有阴影的那一部分。
在手机显示效果图如下
以下是相关代码
@Override
protectedPixelPerfectEngineOptions onCreatePixelPerfectEngineOptions() {
PixelPerfectEngineOptionspixelPerfectEngineOptions=
new PixelPerfectEngineOptions(this,ZoomCamera.class);
pixelPerfectEngineOptions.setDesiredSize(800);
pixelPerfectEngineOptions
.setScreenOrientation(ScreenOrientation.LANDSCAPE_FIXED);
pixelPerfectEngineOptions
.setPixelPerfectMode(PixelPerfectMode.CHANGE_HEIGHT);
returnpixelPerfectEngineOptions;
}
复制代码
public EngineOptions createEngineOptions() {
float[] screenSize = this.getScreenSize();
float screenWidth = screenSize[0];
float screenHeight = screenSize[1];
float screenRatio = screenWidth / screenHeight;
float cameraWidth = this.mDesiredSize;
float cameraHeight = this.mDesiredSize;
if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_WIDTH) {
cameraWidth = this.mDesiredSize * screenRatio;
} else if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_HEIGHT) {
cameraHeight = this.mDesiredSize / screenRatio;
}
Class<?>[] parameterTypes = { float.class, float.class, float.class,float.class };
Object[] argParam = { 0.0f, 0.0f, cameraWidth, cameraHeight };
Camera camera = ReflectionUtils.newInstance(this.mCameraCls,
parameterTypes, argParam);
EngineOptions engineOptions = new EngineOptions(true,
this.mScreenOrientation, new FillResolutionPolicy(), camera);
engineOptions.getTouchOptions().setNeedsMultiTouch(true);
engineOptions.getAudioOptions().setNeedsSound(true);
engineOptions.getAudioOptions().setNeedsMusic(true);
engineOptions.getRenderOptions().setDithering(true);
return engineOptions;
}
复制代码
http://www.eoeandroid.com/forum-863-1.html