我正在使用AndEngine尝试创建一个不断旋转360度的球的简单精灵。轮换工作正常。但是,球的图像在纵向模式下看起来很扭曲。
人像:
风景:
你会注意到在肖像模式下球似乎向上伸展。我不确定是什么原因引起的。我希望球保持完美的圆形。
如果有人问...球图像是完美的圆形,是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));
答案 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();
}
您可能需要根据您的解决方案政策更改值,但这对我来说非常有用。