成員變量_xPosition、_yPosition、_xLength和_yLength用于定位和描述圖的大小。_sampleSize變量決定了圖的平滑度。采樣大小是指用于繪制圖中的線的頂點(diǎn)數(shù)。每個(gè)頂點(diǎn)的y位置由特定的一個(gè)函數(shù)決定,例如sine或cosine。_frequency變量用于計(jì)算波形震蕩的頻率,頻率越高,震蕩次數(shù)越多。
默認(rèn)值描述了一個(gè)位于(x:-100,y:-100)、每個(gè)軸長200像素的圖。得到的圖足夠大,方便查看,但是DrawGraph函數(shù)會認(rèn)為圖的x軸和y軸的范圍為0~1。
在成員變量后定義了一個(gè)委托。
public delegate double WaveFunction(double value);
圖經(jīng)常被定義為x=x',y=f(x'),其中x'是x的下一個(gè)值,普通的x是前一個(gè)值。x值通常遞增固定的數(shù)值,而y值從x值計(jì)算得出。WaveFunction委托描述了公式中的f,該函數(shù)接受一個(gè)double值作為參數(shù),并返回一個(gè)double值。這與cosine和sine函數(shù)的簽名相同。通過使用WaveFunction類型,DrawGraph函數(shù)可以接受cosine、sine或其他任意波形函數(shù)作為參數(shù),并不需要編寫其他代碼。
狀態(tài)的構(gòu)造函數(shù)將線寬設(shè)置為3像素,這樣就更容易看到圖中的線。它還關(guān)閉了紋理的狀態(tài)。如果打開了紋理狀態(tài),線看上去可能有點(diǎn)暗,因?yàn)樗鼈儽诲e(cuò)誤地賦予了無效的紋理。
DrawGraph函數(shù)是游戲狀態(tài)中最重要的函數(shù),它負(fù)責(zé)繪制圖。DrawGraph使用采樣率決定如何分布頂點(diǎn),使任意一條線都會占據(jù)整個(gè)圖的長度。定義角度有兩種常見的方式:度數(shù)和弧度。人們都很熟悉度數(shù),知道整個(gè)圓周是360?,半個(gè)圓周是180??;《仁鞘褂肞i衡量度數(shù)的一種方法,整個(gè)圓周是2×Pi,半個(gè)圓周是Pi。C#中的Sin和Cos函數(shù)接受以弧度表示的角度作為參數(shù),因此,計(jì)算y軸的值時(shí),x軸的0~1之間的值會乘以Pi。
DrawGraph函數(shù)的內(nèi)循環(huán)從原來的位置計(jì)算出新位置,然后繪制一條從原來的位置連接到新位置的線。為了實(shí)際演示代碼,需要編寫一個(gè)Render函數(shù)來為正弦函數(shù)和系弦函數(shù)調(diào)用DrawGraph。圖的輸出如圖8-1所示。
public void Render()
{
DrawAxis();
DrawGraph(Math.Sin, new Color(1,0,0,1));
DrawGraph(Math.Cos, new Color(0, 0.5f, 0.5f, 1));