码迷,mamicode.com
首页 > 其他好文 > 详细

游戏的构成

时间:2019-10-28 01:18:15      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:简单   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!