代码:
这是初始化相机的方式 我想要获得设备的分辨率,并根据我设置的相机宽度和高度。
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本机地缩放相机和精灵。
那么为什么精灵在这种情况下没有得到规模?
如何根据分辨率放大精灵?
我也尝试了FillResolutionPolicy。同样的事情。
我正在使用andengine和SpriteSheets的TexturePackerExtension。
答案 0 :(得分:4)
您希望Camera
具有由设备屏幕aspectratio计算的固定width
和height
。将其与FillResolutionPolicy
配对即可获得所需内容。
注意:
AndEngine不为您扩展
Sprites
,但您设置Camera
以便整个Scene
显示为缩放。
答案 1 :(得分:2)
AndEngine甚至会在您的示例中扩展您的Sprites
。结果与预期不符的原因是您手动设置了相机的width
和height
(基于分辨率)。
如果您真的希望每个精灵在每个显示器上以相同的方式缩放,那么您应该选择一个固定分辨率来创建游戏。 例如,您可以将每个精灵和每个位置设置为960x640的分辨率。
// skip the whole if(resolutionRatio == 1.66){.. part
this.mCamera = new SmoothCamera(0, 0, 960f, 640f, 100, 100, 1.0f);
AndEngine然后将缩放相机,以便尽可能多地填充显示。
public EngineOptions onCreateEngineOptions() {
EngineOptions options = new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR, new RatioResolutionPolicy(1.5f), camera;
return options;
}
1.5f
是960x640分辨率的拟合宽高比。
现在您不再需要处理不同的显示尺寸了。