XNA-2D SpriteBatch.Draw的七個多載

新增XNA4.0(2011.09.17),跟3.0好像差異不大,哈~


第一個多載:
public void Draw (
         Texture2D texture,
         Rectangle destinationRectangle,
         Color color
)
Texture2D texture:載入的紋理。
Rectangle destinationRectangle:表示要把紋理畫在視窗的某一個區域裡。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
///////////////////////////////////////////////////////////////////////////////
第二個多載:
public void Draw (
         Texture2D texture,
         Rectangle destinationRectangle,
         Nullable<Rectangle> sourceRectangle,
         Color color
)
Texture2D texture:載入的紋理。
Rectangle destinationRectangle:表示要把紋理畫在視窗的某一個區域裡。
Nullable<Rectangle> sourceRectangle:決定紋理的區域。就是要畫出來的位置。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
///////////////////////////////////////////////////////////////////////////////
第三個多載:
public void Draw (
         Texture2D texture,
         Rectangle destinationRectangle,
         Nullable<Rectangle> sourceRectangle,
         Color color,
         float rotation,
         Vector2 origin,
         SpriteEffects effects,
         float layerDepth
)
Texture2D texture:載入的紋理。
Rectangle destinationRectangle:表示要把紋理畫在視窗的某一個區域裡。
Nullable<Rectangle> sourceRectangle:決定紋理的區域。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
float rotation:將紋理旋轉指定角度(弧度),順時針旋轉
Vector2 origin:旋轉原點座標,就是旋轉時根據某一個點來旋轉的。預設都是圖的左上角,也就是(0,0)
SpriteEffects effects:有3個列舉 None、FlipHorizontally、FlipVertically,他在這裡的功能只是相圖形左右映射和上下映射而已,可用來作鏡子貼圖。
float layerDepth:圖層深度:在SpriteSortMode為FrontToBack的情況之下數值越大會越上層。BackToFront正好是相反的
///////////////////////////////////////////////////////////////////////////////////////////////////////////
第四個多載:
public void Draw (
         Texture2D texture,
         Vector2 position,
         Color color
)
Texture2D texture:載入的紋理。
Vector2 position:紋理的位置。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
///////////////////////////////////////////////////////////////////////////////////////////////
第五個多載:動畫常用
public void Draw (
         Texture2D texture,
         Vector2 position,
         Nullable<Rectangle> sourceRectangle,
         Color color
)
Texture2D texture:載入的紋理。
Vector2 position:紋理的位置。
Nullable<Rectangle> sourceRectangle:決定紋理的區域。就是要畫出來的位置。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
///////////////////////////////////////////////////////////////////////////////////////////////
第六個多載:
public void Draw (
         Texture2D texture,
         Vector2 position,
         Nullable<Rectangle> sourceRectangle,
         Color color,
         float rotation,
         Vector2 origin,
         float scale,
         SpriteEffects effects,
         float layerDepth
)
Texture2D texture:載入的紋理。
Vector2 position:紋理的位置。
Nullable<Rectangle> sourceRectangle:決定紋理的區域。就是要畫出來的位置。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
float rotation:將紋理旋轉指定角度(弧度),順時針旋轉
Vector2 origin:旋轉原點座標,就是旋轉時根據某一個點來旋轉的。預設都是圖的左上角,也就是(0,0)
float scale:縮放,比例縮放
SpriteEffects effects:有3個列舉 None、FlipHorizontally、FlipVertically,他在這裡的功能只是相圖形左右映射和上下映射而已,可用來作鏡子貼圖。
float layerDepth:圖層深度:在SpriteSortMode為FrontToBack的情況之下數值越大會越上層。BackToFront正好是相反的
///////////////////////////////////////////////////////////////////////////////////////////////
第七個多載:
public void Draw (
         Texture2D texture,
         Vector2 position,
         Nullable<Rectangle> sourceRectangle,
         Color color,
         float rotation,
         Vector2 origin,
         Vector2 scale,
         SpriteEffects effects,
         float layerDepth
)
Texture2D texture:載入的紋理。
Vector2 position:紋理的位置。
Nullable<Rectangle> sourceRectangle:決定紋理的區域。就是要畫出來的位置。
Color color:將紋像染成指定的顏色,指定為white將不會為紋理染色。
float rotation:將紋理旋轉指定角度(弧度),順時針旋轉
Vector2 origin:旋轉原點座標,就是旋轉時根據某一個點來旋轉的。預設都是圖的左上角,也就是(0,0)
Vector2 scale:縮放,用來作不同比例的縮放。
SpriteEffects effects:有3個列舉 None、FlipHorizontally、FlipVertically,他在這裡的功能只是相圖形左右映射和上下映射而已,可用來作鏡子貼圖。
float layerDepth:圖層深度:在SpriteSortMode為FrontToBack的情況之下數值越大會越上層。BackToFront正好是相反的


 

以下是XNA 3.0的======================================

SpriteBatch.Draw有七種樣子,每個都有好用的地方,簡單的2D特效就直接呼叫這些函式就可以容易達到!就讓我們看看有那些!

一. SpriteBatch.Draw (Texture2D, Vector2, Color)

這是最簡單的樣式,我們之前的demo都是呼叫此函式,參數分別是2D圖形物件(texture),顯示座標(position),顏色遮罩(color),這裡稍微說明一下顏色遮罩,

 

 

假設我們一張圖有兩種顏色~藍色和綠色(喔!~好敏感的顏色),rgb值分別為0,0,255和0,255,0,

我們選用黃色的遮罩(255,255,0),這樣遮下去會發生什麼事呢?

遮罩並不事把顏色混合喔,這張藍綠的圖會變成黑和綠了!

算法很簡單,先將遮罩標準化,三個顏色都除以255,然後再乘上原來的顏色就是結果的顏色了。

像是我們要畫煙火的火花,每個火花都是單一顏色,但是會不斷變化,就可以用白色的圖,然後改變遮罩來變換顏色,

之前紅色小球的例子,我們也可以改成用白色的球,然後用遮罩該變他的顏色,這樣很多球可以有不同顏色,但是卻只需要一張圖,方便又節省!

 

二.SpriteBatch.Draw (Texture2D, Rectangle, Color)

這和第一個很像,但是中間變成Rectangle(destinationRectangle),他是一個矩形物件,重要的有X,Y,Width,Height這四個屬性,

X,Y是此矩形左上角的座標,Width,Height就是他的長和寬了。

這裡的矩形物件是用來標示圖形的顯示位置的,和上面的Vector2不同的地方是,除了可以決定圖形的左上角座標,還可以決定圖形的大小,也就是有縮放的功能。

讓我們來看看例子:

1 

左邊是原尺寸娜歐,右邊是長寬150的娜歐。

 

三.SpriteBatch.Draw Method (Texture2D, Vector2, Nullable<Rectangle>, Color)

四.SpriteBatch.Draw Method (Texture2D, Rectangle, Nullable<Rectangle>, Color)

第三個和第四個一起講,因為們一樣只多了一個Nullable<Rectangle>的參數(sourceRectangle),其他和上面兩個函式相同。

這多出來的參數是讓我們決定來源圖的位置,也就是可以不要把整張圖都貼出來,只貼想要的部份。

我最常用到此參數的地方就是動畫,把許多連續的圖檔連接成一張大圖,然後定時改變顯示的部位,就可以達到2D動畫的效果。

當然,如果你傳入null的話,就是整張圖都顯示了。

 

五.SpriteBatch.Draw Method (Texture2D, Rectangle, Nullable<Rectangle>, Color, Single, Vector2, SpriteEffects, Single)

第五個多載後面多了四個參數,Color之後依序是旋轉角度(rotation)、原點座標(origin)、特效(effects)、深度(layerDepth)。

旋轉角度是以弧度為單位,順時針轉,所以輸入360可不只轉一圈,而要旋轉的話就一定要有一個固定點,那就是接著的原點座標,你可以想像一張圖被釘上圖釘的感覺,

之前的那些函式沒有設定原點座標,所以預設都是圖的左上角,也就是(0,0)。

此原點座標不光只是為了旋轉而已,一旦你設定此參數,移動和縮放都會被影響,如下圖,黑色是沒設定原點且不縮放也不旋轉。

此圖紅線原點設定為(0,0),分別是直接貼圖、放大、旋轉。

2 

此圖紅線原點設為(14,14),分別是直接貼圖、放大、旋轉。

3 

上面兩張圖的紅線參數完全一樣,只有原點不同而已,可以看得出來都是以原點做計算。

下一個參數是SpriteEffects,他是列舉型別(enum)有三個值分別是None、FlipHorizontally、FlipVertically,

他在這裡的功能只是相圖形左右映射和上下映射而已,用來作鏡子貼圖不錯用,

可以用|連結起來,像這樣「SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically」,這樣只是上下左右顛倒而已。

最後一個參數是深度,數字是0到1之間,會影響畫圖的先後順序,0是前面1是後面,然後根據SpriteBatch.Begin裡的SpriteSortMode決定畫的順序,

當你畫面上有很多物件時,先後的順序是很需要好好規劃的。

關於SpriteBatch.Begin參數的說明請看上一篇XNA-2D SpriteBatch.Begin和SpriteBatch.End

 

六.SpriteBatch.Draw Method (Texture2D, Vector2, Nullable<Rectangle>, Color, Single, Vector2, Single, SpriteEffects, Single)

七.SpriteBatch.Draw Method (Texture2D, Vector2, Nullable<Rectangle>, Color, Single, Vector2, Vector2, SpriteEffects, Single)

最後這兩個多載比第五種函式多了一個縮放,放在倒數第三個參數(scale),因為他指定畫圖位置的第二個參數只能設定畫出的位置,所以要縮放的話就要在後面設定,

第六種函式的縮放參數是一個float,為等比例縮放,第七種函式的縮放參數是Vector2,用來作不同比例的縮放。

 

 

原文 : http://www.dotblogs.com.tw/help/archive/2008/12/21/6480.aspx

arrow
arrow
    全站熱搜

    createps 發表在 痞客邦 留言(0) 人氣()