标签:简单 case 动作 动画 fine 结构 return get 同步
一个游戏基本上是一个连续的循环,它完成逻辑动作并以每30帧/每秒(或更高)的刷新率在屏幕上绘制图像。
下面是一个简化的游戏循环结构:
一:初始化
在这一步中,游戏程序执行标准初始化操作,如内存分配、资源采集、从磁盘载入数据等等
二:进入游戏循环
在这一步中,代码执行到游戏主循环,此时各种操作开始执行,执行持续到用户退出主循环为止
三:获得玩家的输入信息
在这一步里,游戏玩家的输入信息被处理或缓存,以备下面的人工智能和游戏逻辑步骤使用
四:执行人工智能和游戏逻辑
这一部分包括游戏代码的主体部分,诸如执行人工智能、物理系统和一般游戏逻辑,其结果用于在屏幕上绘制下一帧图像
五:渲染下一帧图像
在这一步中,玩家的输入和第四步中游戏人工智能和游戏逻辑执行的结果,被用来产生游戏动画的下一帧动画,这个动画通常被放在离屏缓存区(offscreen buffer area)内,因此玩家不会看到它逐渐被渲染的过程。随后该图像被迅速复制到显示器中并显示出来
六:同步显示
通常由于游戏复杂程度的不同,游戏在计算机上运行的速度会时快时慢,而这是难以接受的。因此必须把游戏按照某个最大帧速率进行同步,并使用定时功能或等待函数来保持同步。
七:循环
这一步非常简单,只需返回到游戏循环的入口并重新执行上述全部步骤
八:关闭
这一步是游戏的结束,表示将退出游戏主程序或主循环,并回到操作系统。然而,在用户结束游戏之前,游戏程序必须释放所有的资源并清理系统,这些释放资源的操作对任何其他软件也是同样要做的
游戏循环是一个含有大量状态的FSM(Finite State Machine),下面是更详细的一个版本:
1 #define GAME_INIT 2 #define GAME_MENU 3 #define GAME_STARTING 4 #define GAME_RUN 5 #define GAME_RESTART 6 #define GAME_EXIT 7 8 int game_state = GAME_INIT; 9 int error = 0; 10 11 void main() 12 { 13 while (game_state != GAME_EXIT) 14 { 15 switch(game_state) 16 { 17 case GAME_INIT: 18 { 19 Init(); 20 game_state = GAME_MENU; 21 }break; 22 23 case GAME_MENU: 24 { 25 game_state = Menu(); 26 }break; 27 28 case GAME_STARTING: 29 { 30 Setup_For_Run(); 31 game_state = GAME_RUN; 32 }break; 33 34 case GAME_RUN: 35 { 36 Clear(); 37 Get_Input(); 38 Do_Logic(); 39 Render_Frame(); 40 Wait(); 41 }break; 42 43 case GAME_RESTART: 44 { 45 Fixup(); 46 game_state = GAME_MENU; 47 }break; 48 49 case GAME_EXIT: 50 { 51 Release_And_Cleanup(); 52 error = 0; 53 }break; 54 55 default: break; 56 } 57 } 58 return (error); 59 }
标签:简单 case 动作 动画 fine 结构 return get 同步
原文地址:https://www.cnblogs.com/albert0504/p/11749829.html