DrawGraph函數(shù)有兩個(gè)參數(shù),一個(gè)是用于繪制圖的函數(shù),另一個(gè)是決定圖的顏色的顏色值。正弦和余弦是波形,將這兩個(gè)波形加起來,很容易產(chǎn)生有趣的新波形。通過使用匿名方法,可以創(chuàng)建一個(gè)新的波形函數(shù)。下面的代碼段創(chuàng)建了一個(gè)圖,將余弦和正弦加起來,并把結(jié)果縮小了一半。
DrawGraph(delegate(double value)
{
return (Math.Sin(value) + Math.Cos(value)) *0.5;
}, new Color(0.5f, 0.5f, 1, 1));
嘗試運(yùn)行下面的代碼段,然后觀察得到的結(jié)果。
DrawGraph(delegate(double value)
{
return (Math.Sin(value) + Math.Sin(value + value))*0.5;
}, new Color(0.5f, 0.5f, 1, 1));
這些圖看起來很有趣,但如果在游戲中沒有應(yīng)用,它們看上去就有點(diǎn)學(xué)術(shù)化。接下來,我們就使用這些函數(shù)來使精靈動(dòng)起來。
8.1.2 使用三角函數(shù)實(shí)現(xiàn)特殊效果
創(chuàng)建一個(gè)新的游戲狀態(tài)SpecialEffectsState。這個(gè)狀態(tài)將演示如何使用Text類以及剛才討論的正弦和余弦函數(shù)創(chuàng)建很酷的特效。
class SpecialEffectState : IGameObject
{
Font _font;
Text _text;
Renderer _renderer = new Renderer();
double _totalTime = 0;
public SpecialEffectState(TextureManager manager)
{
_font = new Font(manager.Get("font"), FontParser.Parse("font.fnt"));
_text = new Text("Hello", _font);
}
public void Update(double elapsedTime)
{
}
public void Render()
{
Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
_renderer.DrawText(_text);
_renderer.Render();
}
}
基本的狀態(tài)只是渲染出文本“Hello”。使用這個(gè)正弦值很容易使文本的透明度從0逐漸變化為1,然后又從1變化為0。這里使用的是文本,但是使用精靈或模型也一樣很簡(jiǎn)單。