对于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;
- }
复制代码
OGEngine之多分辨率支持策略和原理
时间: 2024-10-05 03:35:15