DrawGraph函数有两个参数,一个是用于绘制图的函数,另一个是决定图的颜色的颜色值。正弦和余弦是波形,将这两个波形加起来,很容易产生有趣的新波形。通过使用匿名方法,可以创建一个新的波形函数。下面的代码段创建了一个图,将余弦和正弦加起来,并把结果缩小了一半。
DrawGraph(delegate(double value)
{
return (Math.Sin(value) + Math.Cos(value)) *0.5;
}, new Color(0.5f, 0.5f, 1, 1));
尝试运行下面的代码段,然后观察得到的结果。
DrawGraph(delegate(double value)
{
return (Math.Sin(value) + Math.Sin(value + value))*0.5;
}, new Color(0.5f, 0.5f, 1, 1));
这些图看起来很有趣,但如果在游戏中没有应用,它们看上去就有点学术化。接下来,我们就使用这些函数来使精灵动起来。
8.1.2 使用三角函数实现特殊效果
创建一个新的游戏状态SpecialEffectsState。这个状态将演示如何使用Text类以及刚才讨论的正弦和余弦函数创建很酷的特效。
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();
}
}
基本的状态只是渲染出文本“Hello”。使用这个正弦值很容易使文本的透明度从0逐渐变化为1,然后又从1变化为0。这里使用的是文本,但是使用精灵或模型也一样很简单。