当前位置: 首页 > 知识库问答 >
问题:

AndEngine-Sprites不会在不同的设备上缩放

皇甫文乐
2023-03-14

代码:

这就是我初始化相机的方式。
I',试图获得设备的分辨率,并在此基础上设置相机的宽度和高度。

     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());   
        }



        }

问题是。

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

那么为什么精灵在这种情况下不会被缩放呢?

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

我也试过FillResolutionPolicy。同样的事情。

我用的是TexturePackerExtension of andengine和SpriteSheets。

共有2个答案

喻增
2023-03-14

即使在你的例子中,安德林也会缩放你的精灵。结果与预期不符的原因是您手动设置了相机的宽度高度(基于分辨率)。

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

卓致远
2023-03-14

您需要一个具有固定宽度和由设备屏幕角度计算的高度相机。将其与FillResolutionPolicy配对,您就可以得到您想要的。

注:

AndEngine不会为您缩放精灵,但您可以设置相机,使整个场景显示为缩放。

 类似资料:
  • 我正在尝试使用Intent打开文件。操作\u获取\u类似于此帖子的内容: Android打开一个文件与ACTION_GET_CONTENT结果到不同的Uri的 但是这里只是一个解决方案,如何使用不同的SDK/文件夹获取文件名,而不是不同的设备。获得Uri的意图也保持不变。 我想开门。png文件。 Uri.getPath()为两个设备(都. png文件存储在下载文件夹): 因此,问题是,如果我使用

  • 我正在尝试通过蓝牙打印到热敏打印机。 我以前能够在Nexus 7设备(第一代和第二代)上成功打印。然而,当我将完全相同的代码复制粘贴到不同的应用程序上,并将其部署到华硕平板电脑上时,我突然得到一个,告诉我我的套接字可能已关闭。 这是我的代码: 这里是来自try-cat块的错误: 现在我很困惑,为什么当我所做的只是将代码部署到不同的设备上时会突然出现错误。 我该如何进行?

  • 我的要求是既不显示相机预览,也不使用图像捕捉相机的意图。 在那里,我找到了一种适用于我的第一台测试设备(Galaxy tab 7)的方法。 我的功能如下所示 和< code>getCameraID功能如下 现在我面临着在不同设备上成功运行上述代码的困难。 三星Galaxy S(2.3.6):前置摄像头始终返回绿色图像,但编码后置摄像头工作正常。 三星Galaxy Nexus (4.1):编码不适用

  • 我正在使用axios软件包将API请求从我的应用程序发送到我的后端 后端使用Laravel构建,是一个简单的rest API 如果我使用在桌面上运行爱奥尼亚应用程序,它工作正常 如果我构建APK并安装应用程序: 在版本8或更低的Android设备上,它工作正常 在版本为9或以上的Android设备上,飞行前检查一直失败 (这是通过Chrome使用远程设备功能来检查应用程序的请求) 最初,请求甚至不

  • 包org.andengine.ui.activity; 导入org.andEngine.BuildConfig; 导入org.andEngine.Audio.Music.MusicManager; 导入org.andEngine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.E

  • 我创建了一个如图所示的按钮布局设计。如何实现不同尺寸屏幕的设计模式?这种布局适合3.7英寸屏幕,但不适合其他屏幕。可能是scrollview是一个选项,但这并不满足我。我怎么能做到呢?有什么帮助吗? 这是我的xml文件