![](/img/trans.png)
[英]Raspberry Pi 2 - Distortion while moving objects in Portrait mode
[英]AndEngine portrait distortion with RotationModifier
我正在使用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));
我采取了上述解决方案并对其进行了改进:
创建相机时,请执行以下操作:
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;
}
我自己想通了。 要使用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();
}
您可能需要根据您的解决方案策略更改值,但这对我来说效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.