[UE4]游戏主循环
游戏的运行模型
理解游戏的运行模型,对处理很多游戏错误有非常大的帮助。
游戏是有一个主循环的。那么游戏主循环做了什么事情呢?

游戏主循环一次就表示一帧,游戏主循环包括:接受输入、处理游戏逻辑、渲染、Sleep。
帧的英文是Frame,帧率英文是Frame Per Second(简称FPS)。
一般游戏的帧率是60FPS,也就是一秒渲染60帧。60帧的情况下,游戏会非常流畅,不会感觉到卡顿。
60FPS的游戏中,一帧是1/60=0.0166666666666667秒,大约是17毫秒。
电影的帧率是24帧,电影比游戏慢多了,为什么电影是24帧呢,这个是有历史原因的,早期的电影是使用胶卷制作的,帧数越多使用的胶卷越高,成本也就越高。
如果电影中晃动镜头特别多的时候,就会感觉画面糊成一片,看得很不清晰。为什么游戏的帧率普遍要求要比电影高呢?这是因为游戏是有操作的,尤其是动作游戏,玩家每操作一次都要在画面上体现出来,如果帧率过低,就感觉到有延迟。
Sleep的作用
主循环的最后一步的Sleep的作用是稳定帧率。在60FPS的游戏中,一帧是17毫秒:
一、如果游戏主循环的前三个步骤(接受输入、处理游戏逻辑、渲染)的执行时间小于17毫秒,假设8毫秒就完成了前三个步骤,那么就Sleep等待9毫秒;如果不进行Sleep,游戏的速度就会加快。
二、如果游戏主循环的前三个步骤执行时间超过了17毫秒,比如30毫秒才完成前三个步骤,最后一个步骤Sleep就不会被执行,玩家就会感觉到画面卡了一下。
如果知道游戏的帧率
有一个选项在开发游戏的时候很重要,一定要打开并一直关注。

如图所示:37.42FPS表示帧率是37.42,26.72MS表示运行一帧要26.72毫秒。
在游戏开发过程中,应该一直关注FPS,如果发现FPS突然掉了,就能大概知道是什么地方出了问题。
理解游戏主循环模型,就能理解很多游戏错误是怎么产生的。
[UE4]游戏主循环的更多相关文章
- Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器
保卫萝卜~想法一直存在于想法,实战才是硬道理!有想法就去实现,眼高手低都是空谈. 一.游戏主循环GameSchedule 主循环是游戏处理逻辑,控制游戏进度的地方,处理好主循环是很重要的 ...
- 游戏主循环(Game Loop)
游戏主循环是游戏的心跳,一般使用while循环进行主动刷新. 一次循环由获取用户输入.更新游戏状态.处理AI.播放音乐和绘制画面组成. 这些行为可以分成两类: update_game(); // 更新 ...
- Cocos2d-x 动手实现游戏主循环
因为Cocos2d-x封装的非常好,所以对于非常多新手,他们仅仅知道先new一个场景,在场景上加入布景或精灵,然后用Director的runWithScene便能够执行游戏了.假设给一个精灵加个动作, ...
- Vue+WebPack游戏设计:自动背景贴图和游戏主循环的实现
- cocos2d-x游戏引擎核心之三——主循环和定时器
一.游戏主循环 在介绍游戏基本概念的时候,我们曾介绍了场景.层.精灵等游戏元素,但我们却故意避开了另一个同样重要的概念,那就是游戏主循环,这是因为 Cocos2d 已经为我们隐藏了游戏主循环的实现.读 ...
- 辛巴学院-Unity-剑英的c#提高篇(一)主循环
这是测试版 辛巴学院:正大光明的不务正业. 最近刚刚离开了我服务了三年多的公司,因为一个无数次碰到的老问题,没钱了. 之前不知道做什么好的时候,机缘巧合之下和哒嗒网络的吴总聊了一下,发现了vr gam ...
- Update主循环、状态机的实现
从写一段程序,到写一个app,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已. 游戏中存在一个帧的概念. 这个概念大家都知道,类比的话,它就是电影胶卷的 ...
- Cocos2dx源码赏析(1)之启动流程与主循环
Cocos2dx源码赏析(1)之启动流程与主循环 我们知道Cocos2dx是一款开源的跨平台游戏引擎,而学习开源项目一个较实用的办法就是读源码.所谓,"源码之前,了无秘密".而笔者 ...
- Update主循环的实现原理
从写一段程序,到写一个app,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已.游戏中存在一个帧的概念. 这个概念大家都知道,类比的话,它就是电影胶卷的格.一 ...
随机推荐
- LeetCode - Find Duplicate Subtrees
Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only ne ...
- 【BZOJ2229】【ZJOI2011】最小割
冷门知识点…… 原题: 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中 ...
- Java基础三(Scanner键盘输入、Random随机数、流程控制语句)
1.引用类型变量的创建及使用2.流程控制语句之选择语句3.流程控制语句之循环语句4.循环高级 ###01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scanner类是属于 ...
- python基础(八)——多线程
[root@bogon python]# cat test.py #!/usr/bin/ptyhon import thread import time def print_time(threadNa ...
- What are long running processes?
转自:https://blog.bernd-ruecker.com/what-are-long-running-processes-b3ee769f0a27 Some communities have ...
- lamp安装总结
1.安装准备 建一个目录用于存放各软件包的压缩文件, 如我把我的源码文件都放在了 /software目录下 切换到/software目录下,执行 wget http://dev.mysql.com ...
- Grid Virtual Server 和 网格计算
Grid Virtual Server 的 Virtual Server 源于 LVS (Linux Virtual Server) , LVS 的意思就是把 多个 Linux 服务器 联合起来构成一 ...
- apache2 配置虚拟主机
查看 apache2 的配置位置: whereis apache2 我的在:/etc/apache2 sites-available 文件夹下面放的就是 虚拟站点的配置文件: 随便复制一个改改: c ...
- 5、微信卡券code模式
非自定义Code码: "use_custom_code":false,可以群发卡券,客服消息派发卡券 自定义code: "use_custom_code":tr ...
- java-jdbc数据库连接
web.xml:(web.xml) <!-- 加载spring容器 --> <context-param> <param-name>contextConfigLoc ...