對於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