2012-06-19 35 views
1

我正在使用AndEngine嘗試創建一個簡單的精靈旋轉360度的球不斷。旋轉工作正常。但是,只有在人像模式下,球的圖像纔會變形。AndEngine肖像變形RotationModifier

肖像:

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)); 
+0

這可能與您在初始化時設置的ResolutionPolicy更相關 – jmroyalty

+0

我現在已經包含了我的解決策略 – MJ93

+0

看來我的CAMERA_WIDTH比我的CAMERA_HEIGHT大。我改變了價值觀,現在人像看起來不錯,但風景更長。是否可以在第一次調用之後設置新的RatioResolutionPolicy? – MJ93

回答

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

} 

您可能需要改變取決於你的解決策略值,但這個工程完美的我。

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