[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,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已.游戏中存在一个帧的概念. 这个概念大家都知道,类比的话,它就是电影胶卷的格.一 ...
随机推荐
- NDK: GCC 4.6 crashes
used version: NDK r9b, arm-linux-androideabi-4.6 GCC, with "-O2 -finline-limit=24". got t ...
- 【java编程】Java魔法类:Unsafe应用解析
转载来源:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html 前言 Unsafe是位于sun.mis ...
- 尚硅谷【SpringBoot】入门
https://www.bilibili.com/video/av20965295/?p=2 缺点: 基于springframe的封装 对framework api需要熟悉 2微服务 2014 ...
- scala函数等号省略
例1: 此时没有写返回值,但是有等号,函数会自己推断返回值,此时的返回值是Int def add(x:Int, y:Int) = { x+y} 例2: 此时没有写返回值,也没有等号,无论函数内部有没有 ...
- windows下能搭建php-fpm吗 phpstudy
这个Windows和Linux系统是不一样的,因为一般nginx搭配php需要php-fpm中间件,但是Windows下需要第三方编译. 下载的包里有php-cgi.exe 但不是php-fpm如果想 ...
- 主机-配件-接口-整机-3c-1
standby 待机 hibernate 休眠(睡眠) power-off 关机 usb端口能给外部设备充电在低压状态(standby,hibernate,power-off),如果系统运行在batt ...
- Linux 性能分析调优 (四)——案例篇:系统中出现大量不可中断进程和僵尸进程怎么办
之前讲到 CPU 使用率的类型.除了上一节提到的用户 CPU 之外,它还包括系统 CPU(比如上下文切换).等待 I/O 的 CPU(比如等待磁盘的响应)以及中断 CPU(包括软中断和硬中断)等. 在 ...
- DISC测试
您的测评结果 您的测评结果是:SC主导DISC图形 结果解读 这种典型行为风格,可被大致描述为是"调解者"的类型.这种类型的人通常生性和善,关注细节.他们关心别人,并在工作中一 ...
- mysql之 CentOS系统针对mysql参数优化
内核相关参数(/etc/sysctl.conf) 以下参数可以直接放到sysctl.conf文件的末尾: net.core.somaxconn = 65535 net.core.netdev_max ...
- 运用MQTT-JMeter插件测试MQTT服务器性能
今天我们介绍XMeter团队带来的新版MQTT-JMeter插件,您可以更为方便地添加MQTT连接.发布.订阅取样器,构造组合的应用场景,例如背景连接.多发少收.少发多收,计算消息转发时延等.利用该插 ...