使用RotationModifier进行AndEngine人像失真

时间:2012-06-19 17:24:46

标签: java android andengine

我正在使用AndEngine尝试创建一个不断旋转360度的球的简单精灵。轮换工作正常。但是,球的图像在纵向模式下看起来很扭曲。

人像:

enter image description here

风景:

enter image description here

你会注意到在肖像模式下球似乎向上伸展。我不确定是什么原因引起的。我希望球保持完美的圆形。

如果有人问...球图像是完美的圆形,是200px x 200px。

这是我的代码:

Ball = new Sprite(100, 100, 200, 200, this.BallRegion);

LoopEntityModifier EntityModifier = 
             new LoopEntityModifier(new RotationModifier(10, 0, 360));          
Ball.registerEntityModifier(EntityModifier);

scene.attachChild(Ball);

我的解决方案政策:

    this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    return new org.anddev.andengine.engine.Engine(new EngineOptions(true,
            null, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
            this.mCamera));

2 个答案:

答案 0 :(得分:1)

我采取了上述解决方案并对其进行了改进:

创建相机时,请执行以下操作:

Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

camera.setResizeOnSurfaceSizeChanged(true);
camera.setCenter( 0.5f * CAMERA_WIDTH
                , 0.5f * CAMERA_HEIGHT);

然后覆盖onConfigurationChanged(Configuration newConfig)

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            getEngine().getCamera().setRotation(0);
        }
        else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            getEngine().getCamera().setRotation(90f);
        }
    }

同样在这种情况下,如果您在壁纸中使用加速度计,则应更正加速度计的数据:

 @Override
 public void onAccelerationChanged(final AccelerationData pAccelerationData) {
     boolean isCameraRotated = getEngine().getCamera().isRotated();

        float correctAccelerationX = isCameraRotated ? pAccelerationData.getY() 
                                                     : pAccelerationData.getX();
        float correctAccelerationY = isCameraRotated ? pAccelerationData.getX() 
                                                     : pAccelerationData.getY() * -1;
  }

答案 1 :(得分:0)

自己想出来。要在AndEngine中使用动态壁纸处理方向更改,您可以使用以下代码:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        scene.setScale(1);
    }
    else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        scene.setScaleX(480.0f / 720.0f);
        scene.setScaleY(1.0f);
    }

            //Rebuilds the scene. onLoadScene() calls to this method.
    BuildScene();

}

您可能需要根据您的解决方案政策更改值,但这对我来说非常有用。