Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安引擎-精灵不会在不同的设备上缩放_Android_Andengine_Resolution_Android Resolution - Fatal编程技术网

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来完成其余部分。此外,由于白色条纹通常不受欢迎,因此您可以使用应用程序的主题属性将其更改为您选择的任何颜色,例如黑色。更改比率解决方案策略也将消除条形图,但根据您的布局,可能会导致其他显示问题,因为在一台设备上可见的某些屏幕在另一台设备上不可见。