2

コード :

これがカメラの初期化方法です。
私は、デバイスの解像度を取得しようとしており、それに基づいてカメラの幅と高さを設定しています。

     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のデバイスで同じコードを試したときここに画像の説明を入力

高解像度のデバイスではスプライトがスケーリングされていないと思います。
私の知る限り、エンジンはカメラとスプライトをネイティブにスケーリングします。

では、なぜこの状況でスプライトがスケーリングされないのでしょうか?

解像度に基づいてスプライトを拡大するにはどうすればよいですか?

FillResolutionPolicy も試しました。同じこと。

私はandengineとSpriteSheetsのTexturePackerExtensionを使用しています。

4

2 に答える 2

4

デバイスの画面縦横比によって計算された と固定Cameraのが必要です。それを aと組み合わせると、必要なものが得られます。widthheightFillResolutionPolicy

ノート:

AndEngine は自動的にスケーリング しませんが、全体がスケーリングされて表示されるようにSpritesを設定します。CameraScene

于 2013-04-09T06:43:04.820 に答える