整理的一些关于C#方面的游戏编程资料
ProcessFrame,这更能清楚地表明该方法实际的职责。
protected virtual void ProcessFrame()
{
if( !paused )
{
// do processing here
}
else
{
System.Threading.Thread.Sleep( 1 );
}
}
在ProcessFrame方法中添加了一些代码,用来判断游戏是否暂停。如果游戏没有暂停,则需要在相应的if语句块内添加处理逻辑,否则,让游戏线程休眠1ms。
由于Render和Run方法没有作什么改变,就不作什么说明了。
事件
窗体游戏不得不关注失去焦点这个问题。在多任务操作系统中(如Windows),用户可以非常容易地停止游戏并查看其它窗体的情况。自然地,游戏不要太自私,应该允许用户去使用其它应用程序,并等待用户返回。当程序失去焦点,就会触发执行OnLoseFocus事件。
protected override void OnLostFocus( EventArgs e )
{
base.OnLostFocus( e );
paused = true;
}
这时候,告诉基类(Form类)游戏程序已经失去焦点,并且设置Paused属性的值为true,让游戏暂停。
Paused属性
新框架有一个Paused属性封装bool类型的paused字段。
public bool Paused
{
get { return paused; }
set
{
// pause the game
if( value == true && paused == false )
{
gametimer.Pause();
paused = true;
}
// unpause the game
if( value == false && paused == true )
{
gametimer.Unpause();
paused = false;