2012-09-16 77 views
2

從透明圖像轉換到不透明圖像時,我遇到了動畫形象的問題。XNA動畫精靈從透明到不透明

如果我將圖像從不透明圖像製作爲透明圖像的動畫,效果很好。 但是,如果我從透明圖像不透明圖像動畫圖像,它的非功能性(這是問題)

示例代碼:

從不透明到透明人稱:(一切正常,它的功能)

//Define variables (in construct): 

float AlphaTime = 3500f; // total animate time (at milliseconds) 
float AlphaTimeSubtract = 3500f; // at milliseconds 
Color color = Color.White; 

//Update method: 

AlphaTimeSubtract -= (float)(gameTime.ElapsedGameTime.TotalMilliseconds); // abate number of elapsed time (for milliseconds) 
color *= MathHelper.Clamp(AlphaTimeSubtract/AlphaTime, 0, 1); 

//Draw merhod: 
spriteBatch.Draw(texture, position, color); 

動畫從透明到不透明:(也就是問題,它是不起作用的)!

結果是無形的精靈(它是錯的)

正確的結果應該是:從透明的動畫精靈不透明。

//Define variables (in construct): 

float AlphaTime = 3500f; // total animate time (at milliseconds) 
float AlphaTimeSubtract = 3500f; // at milliseconds 
Color color = Color.White; 

//Update method: 

AlphaTimeSubtract -= (float)(gameTime.ElapsedGameTime.TotalMilliseconds); // abate number of elapsed time (for milliseconds) 
color *= MathHelper.Clamp(Math.Abs(AlphaTimeSubtract - AlphaTime)/AlphaTime , 0, 1); 

//Draw merhod: 
spriteBatch.Draw(texture, position, color); 

MathHelper.Clamp()

Math.Abs():返回絕對值

我在做什麼錯?

+0

顏色乘數=從0到1的浮點數。0 =透明,1 =不透明 – user1675817

回答

1

編輯:對不起,我有靈感的後期閃光:)

您的代碼不起作用,因爲當Update()方法被稱爲第一次阿爾法你的顏色變得0 ,因爲Math.Abs(AlphaTimeSubtract - AlphaTime)/AlphaTime返回的值非常接近0.0f因此對於任何數字,您將乘以顏色,它仍然爲0。事實上這個問題在第一種情況下沒有發生,因爲邏輯表示從1.0f開始減少它。因此,在這種情況下,你必須從255降低阿爾法開始每次所以這應該工作:

//Initialize it to 0 
float AlphaTimeSubtract = 0.0f; 

//Then in the update method increase it (The inverse logic you used in the opaque --> transparent effect) 
AlphaTimeSubtract += (float)(gameTime.ElapsedGameTime.TotalMilliseconds); 
color = Color.White * MathHelper.Clamp(AlphaTimeSubtract/AlphaTime , 0, 1); 

我修改了代碼,使其更容易比第一種效果(不透明 - >透明)。

+0

謝謝,但兩個樣本都不起作用。我嘗試控制AlphaTimeSubtract值和顏色值(正在處理)。兩個值都是對的!但是精靈畫得像隱形。無動畫。我相信,我沒有「沒有」sintax錯誤!在繪製方法中可以錯誤描述? – user1675817

+0

好吧,我編輯了我的答案,我完全錯了。我試圖解釋我們錯過了什麼。 –

+0

:)非常感謝!它已經起作用了。 – user1675817