AndEngine - Sprites没有在不同的设备上扩展

时间:2013-04-04 19:38:56

标签: android andengine resolution android-resolution

代码:

这是初始化相机的方式 我想要获得设备的分辨率,并根据我设置的相机宽度和高度。

     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的设备上进行了游戏; enter image description here

当我在分辨率为800X480 enter image description here

的设备上尝试相同的代码时

我认为精灵不会在更高分辨率的设备上进行缩放。
根据我的知识,andengine本机地缩放相机和精灵。

那么为什么精灵在这种情况下没有得到规模?

如何根据分辨率放大精灵?

我也尝试了FillResolutionPolicy。同样的事情。

我正在使用andengine和SpriteSheets的TexturePackerExtension。

2 个答案:

答案 0 :(得分:4)

您希望Camera具有由设备屏幕aspectratio计算的固定widthheight。将其与FillResolutionPolicy配对即可获得所需内容。

注意:

  

AndEngine不为您扩展 Sprites,但您设置Camera以便整个Scene显示为缩放。

答案 1 :(得分:2)

AndEngine甚至会在您的示例中扩展您的Sprites。结果与预期不符的原因是您手动设置了相机的widthheight(基于分辨率)。

如果您真的希望每个精灵在每个显示器上以相同的方式缩放,那么您应该选择一个固定分辨率来创建游戏。 例如,您可以将每个精灵和每个位置设置为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分辨率的拟合宽高比。 现在您不再需要处理不同的显示尺寸了。