Android - 通过固定屏幕位置旋转背景图像

时间:2012-02-25 00:59:31

标签: android image rotation

我正在尝试在android中创建简单的自上而下滚动样式应用程序。基本上,图像位于屏幕的底部中心,不会移动。此背后的背景图像将根据设备的倾斜度移动。

如果我不移动(平移)图像并根据第一个图像中心点旋转图像,则背景图像会围绕此点正确旋转。但是,如果我完全翻译背景图像,则旋转不再准确。似乎旋转是基于图像Top,Left而不是屏幕左上角应用的,所以如果我将图像向下翻转100个单位,它现在会旋转100个单位,低于我想要的位置。

基本上我正在寻找一种方法来旋转图像,无论它位于屏幕上的哪个位置,屏幕上的固定位置永远不会改变。希望这会产生幻觉,即屏幕底部的图像正在移动,而事实上它正在移动的背景。感谢。

以下是我正在做的一些简单的代码片段,不确定它是否真的有用:

m_X& m_Y是保持设备倾斜的变量

那可怕的硬编码值264,628是我动画角色在屏幕底部的位置。 (我希望背景图像无论在何处转换为自动旋转)

Update Function:
protected void Update(float a_GameTime)
{
    super.Update(a_GameTime);

    m_CharacterAnimator.Update(a_GameTime);             

    if ((m_CurrentCharacterDirection.contains(LEFT) || m_CurrentCharacterDirection.contains(RIGHT)) && (m_X > 1.0f || m_X < -1.0f))
    {
        m_BackgroundWorldMatrix.preRotate(m_X * .05f, 264, 628);
    }
    if ((m_CurrentCharacterDirection.contains(FORWARD) || m_CurrentCharacterDirection.contains(BACKWARD)) && (m_Y > 1.0f || m_Y < -1.0f))
    {
        m_BackgroundWorldMatrix.postTranslate(0.0f, m_Y * -0.25f);
    }       
}

Draw Function:
protected void Draw(Canvas a_Canvas)
{
    super.Draw(a_Canvas);

    a_Canvas.drawBitmap(m_Background, m_BackgroundWorldMatrix, null);//, m_BackgroundWorldMatrix, null);

    // Draw the animating Character
    m_CharacterAnimator.Draw(a_Canvas);
}

0 个答案:

没有答案