使用源矩形摆动纹理

时间:2013-09-27 22:12:08

标签: c# xna draw texture2d spritebatch

我正在尝试使用XNA绘制一个texture2d。基本上,我有一个加电“冷却填充效应”正在进行中。我有一个纹理,我试图部分绘制,因为冷却时间减少。因此,例如,在10%的冷却时间内,我只绘制了10%的纹理冷却时间(底部),20%只消耗了纹理底部的20%,依此类推。

我遇到的问题是,在绘制纹理时,它会在填满时不停地摇晃。

请注意,下面ActiveSkillTexture是我预加载的填充纹理。它的大小是完全填充图形的大小 InterfaceDrawer.Draw是一种调用SpriteBatch.Draw的方法,但事先做了一些额外的事情。出于所有意图和目的,它与SpriteBatch.Draw相同 Scale是我的比例因子,它只是0到1之间的浮点数 MyDest是此纹理应绘制的预先计算位置(通常从左上角开始)。

以下是一段代码:

Rectangle NewBounds = ActiveSkillTexture.Bounds;
float cooldown = GetCooldown(ActiveSkillId);
if (cooldown > 0) //cooldown timer    
{
    //Code that calculated cooldown percent which I'm leaving out

    if (percentdone != 1) //the percentage the cooldown is done
    {
        //code for fill-from bottom -- 

        float SubHeight = ActiveSkillTexture.Height * percentremaining;
        float NewHeight = ActiveSkillTexture.Height * percentdone;
        NewBounds.Y += (int) SubHeight;
        NewBounds.Height = (int) NewHeight;
        MyDest.Y += SubHeight * Scale;   
    }
}
if (ActiveSkillTexture != null)
   InterfaceDrawer.Draw(SpriteBatch, ActiveSkillTexture, MyDest, NewBounds, Color, 0.0f, Vector2.Zero, Scale, SpriteEffects.None, 0.0f);

我知道你看不到它,但它基本上是摇摆不定的,因为它充满了。我尝试打印出目的地的值,新的边界矩形等,它们似乎都在不断增加而不是“摇摆”,所以我不确定发生了什么。有趣的是,如果我从顶部填充它,它就不会发生。但这可能是因为我每次画画都不需要做数学来改变目的地位置(因为它应该每次从左上角画画)。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

如果您将Vector2.Origin的{​​{1}}参数设置为纹理的左下角,我认为这会更容易。
通过这种方式,您只需使用以下内容增加spriteBatch.Draw

sourceRectangle.Height

没有用无用的数学来找到目的地位置。