2013-09-27 37 views
0

我正在嘗試在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); 

我知道你不能看到它,但它基本上搖晃起來,做,因爲它填滿。我嘗試打印出目的地,新建的矩形等的值,它們似乎一直在增加而不是「搖擺」,所以我不知道發生了什麼。有趣的是,如果我從頂端填充它,它不會發生。但是這可能是因爲我不需要每次繪製數據來改變目標位置(因爲它應該每次從左上角繪製)。

任何幫助將不勝感激。謝謝!

回答

0

我認爲這會更容易,如果您將spriteBatch.DrawVector2.Origin參數設置爲紋理的左下角。
這樣你只需增加sourceRectangle.Height,像這樣的東西:

sourceRectangle.Height = ActiveSkillTexture.Height * percentdone; 

沒有做無用的數學找到目標位置。