Android 安引擎-精灵不会在不同的设备上缩放
代码: 这就是我初始化相机的方式。Android 安引擎-精灵不会在不同的设备上缩放,android,andengine,resolution,android-resolution,Android,Andengine,Resolution,Android Resolution,代码: 这就是我初始化相机的方式。 我试图获得设备的分辨率,并在此基础上设置相机的宽度和高度 public class GameActivity extends SimpleBaseGameActivity { private SmoothCamera mCamera; private DisplayMetrics dM; private int CAMERA_WIDTH, CAMERA_HEIGHT; priva
我试图获得设备的分辨率,并在此基础上设置相机的宽度和高度
public class GameActivity extends SimpleBaseGameActivity {
private SmoothCamera mCamera;
private DisplayMetrics dM;
private int CAMERA_WIDTH, CAMERA_HEIGHT;
private double ScreenWidth,
ScreenHeight,
resolutionRatio;
public EngineOptions onCreateEngineOptions() {
//set Camera
getDeviceResolution();
setCamera();
EngineOptions options = new EngineOptions(true,
ScreenOrientation.LANDSCAPE_FIXED,
new RatioResolutionPolicy((int)this.getCameraWidth(),(int)this.getCameraHeight()),
//new FillResolutionPolicy(),
mCamera);
return options;
}
private void getDeviceResolution() {
dM = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dM);
this.ScreenWidth = dM.widthPixels;
this.ScreenHeight = dM.heightPixels;
this.resolutionRatio = this.ScreenWidth/this.ScreenHeight;
resolutionRatio = (double)Math.round(resolutionRatio * 100) / 100;
Log.d("Resolution","ScrennWidth: "+this.ScreenWidth );
Log.d("Resolution","ScrennHeight: "+this.ScreenHeight );
Log.d("Resolution","Resolution Ratio: " + this.resolutionRatio );
}
private void setCamera() {
if(resolutionRatio == 1.66){
this.setCameraHeight(340);
this.setCameraWidth(400);
}else if(resolutionRatio == 2.13){
this.setCameraHeight(480);
this.setCameraWidth(1024);
}else if(resolutionRatio == 1.77){
this.setCameraHeight(720);
this.setCameraWidth(1280);
}else if(resolutionRatio == 1.5){
this.setCameraHeight(320);
this.setCameraWidth(480);
}else if(resolutionRatio == 1.67){
this.setCameraHeight(480);
this.setCameraWidth(800);
}else {
this.setCameraHeight((int) this.ScreenHeight);
this.setCameraWidth((int) this.ScreenWidth);
}
// Create a Camera
this.mCamera = new SmoothCamera(0,0,(int)getCameraWidth(),(int)getCameraHeight(),100,100,1.0f);
mCamera.setZoomFactor(1.0f);
mCamera.setBoundsEnabled(true);
mCamera.setBounds(0, 0, mCamera.getWidth(), mCamera.getHeight());
}
}
问题是
我已经用480x320分辨率在设备上测试了游戏;
当我在分辨率为800X480的设备上尝试相同的代码时
我认为精灵不会在更高分辨率的设备上进行缩放。据我所知,引擎会自动缩放相机和精灵 那么为什么精灵在这种情况下不会被缩放呢 如何根据分辨率放大精灵 我也试过填写解决方案。同样的事情
我使用的是andengine和SpriteSheets的TexturePackerExtension。即使在您的示例中,andengine也会缩放您的
Sprites
。结果不是您期望的结果的原因是您手动设置了相机的宽度
和高度
(基于分辨率)
如果你真的想在每个显示器上以相同的方式缩放每个精灵,那么你应该选择一个固定分辨率来创建游戏。
例如,您可以将每个精灵和每个位置的分辨率设置为960x640
// skip the whole if(resolutionRatio == 1.66){.. part
this.mCamera = new SmoothCamera(0, 0, 960f, 640f, 100, 100, 1.0f);
然后,引擎将缩放相机,使其尽可能填满显示
public EngineOptions onCreateEngineOptions() {
EngineOptions options = new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR, new RatioResolutionPolicy(1.5f), camera;
return options;
}
1.5f
是适合960x640分辨率的纵横比。
现在,您不必再考虑不同的显示尺寸。您需要一个具有固定宽度和高度的
摄像头,该高度由设备屏幕aspectratio计算。将其与FillResolutionPolicy
配对,您就可以得到您想要的
注:
AndEngine不会为您缩放精灵
,但您可以设置摄影机
,使整个场景
显示为缩放
这并不能解决问题。当我在不同分辨率的设备上试用时,我在相机的左右两侧都有白色条纹。这些条纹是正常的,而引擎试图在不拉伸图像的情况下(通过保持固定的纵横比)填充显示器的大部分。无论如何,如果您想使用不同的分辨率(就像您在示例中通过检测显示度量所做的那样…),则需要手动缩放精灵。在800x480示例中,卡看起来比480x320示例中的小,因为相机更大,但卡仍保持其原始大小。但是,如果您不想缩放和定位每个精灵,请使用一个固定的相机大小,让AndEngine来完成其余部分。此外,由于白色条纹通常不受欢迎,因此您可以使用应用程序的主题属性将其更改为您选择的任何颜色,例如黑色。更改比率解决方案策略也将消除条形图,但根据您的布局,可能会导致其他显示问题,因为在一台设备上可见的某些屏幕在另一台设备上不可见。