使用源矩形的摆动纹理
本文关键字:纹理 | 更新日期: 2023-09-27 18:33:10
我在尝试在 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);
我知道你看不到它,但它基本上是摇晃的,随着它的填充而完成。我尝试打印出目的地、新边界矩形等的值,它们似乎都在持续增加而不是"摇摆",所以我不确定发生了什么。有趣的是,如果我从顶部填充它,它就不会发生。但这可能是因为我不必在每次绘制时都做数学来改变目标位置(因为它每次都应该从左上角绘制(。
任何帮助将不胜感激。谢谢!
我认为如果您将spriteBatch.Draw
的Vector2.Origin
参数设置为纹理的左下角,这会更容易。
这样你只需增加你的sourceRectangle.Height
,像这样:
sourceRectangle.Height = ActiveSkillTexture.Height * percentdone;
无需做无用的数学运算来找到目标位置。