游戏设计模式学习笔记(7)序列模式(双缓冲模式、游戏循环、更新方法)

《Game Programming Pattern》游戏编程模式读书笔记之架构、性能和游戏 前言: 《游戏编程模式》是一本关于游戏的设计模式的书籍,主要讲解如何架构代码;原版为英文版,有电子版本,网络上也有翻译的中文版本,另外我也参考了知乎的一些读书笔记,结合个人理解做了点笔记; 参考: 1.《Game Programming Pattern》英文原版 2.游戏编程模式中文翻译 3.其它读书笔记,知乎-游戏设计模式(一) 序言:架构,性能与游戏 正文: 本文主要内容就是关于... 阅读详情

游戏设计模式学习笔记(7)序列模式(双缓冲模式、游戏循环、更新方法)

参考:

《设计模式与游戏完美开发》

《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN)

《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns)

【游戏设计模式】浅墨_毛星云: https://blog.youkuaiyun.com/poem_qianmo/article/details/53240330


双缓冲模式

定义

  • 用序列的操作模拟瞬间或者同时发生的事情。

应用场景

  • 图形系统,显示一个画面,另一个画面渲染,等下一帧把渲染好的画面显示,另一个拿去渲染。

游戏循环

定义

  • 将游戏的进行和玩家的输入解耦,和处理器速度解耦。
  • 关键:不阻塞用户输入和自适应的帧时间步长

控制游戏速度

  • 固定时间步长,没有同步:

    • 简单。
    • 游戏速度直接受到硬件和游戏复杂度影响。
  • 固定时间步长,有同步:

    对复杂度控制的下一步是使用固定的时间间隔,但在循环的末尾增加同步点,保证游戏不会运行得过快。

    • 简单。
    • 电量友好。
    • 游戏不会运行得太快。
    • **游戏可能运行的太慢。**如果花了太多时间更新和渲染一帧,播放也会减缓。 因为这种方案没有分离更新和渲染,它比更高级的方案更容易遇到这点。 没法扔掉渲染帧来追上真实时间,游戏本身会变慢。
  • 动态时间步长:

    • 能适应并调整,避免运行得太快或者太慢。 如果游戏不能追上真实时间,它用越来越长的时间步长更新,直到追上。
    • 让游戏不确定而且不稳定。 这是真正的问题,当然。在物理和网络部分使用动态时间步长会遇见更多的困难。
  • 固定更新时间步长,动态渲染:

    以固定时间步长更新,如果需要赶上玩家的时间,可以扔掉一些渲染帧。

    • 能适应并调整,避免运行得太快或者太慢。 只要能实时更新,游戏状态就不会落后于真实时间。如果玩家用高端的机器,它会回以更平滑的游戏体验。
    • **更复杂。**主要负面问题是需要在实现中写更多东西。 你需要将更新的时间步长调整得尽可能小来适应高端机,同时不至于在低端机上太慢。

应用

  • 一个游戏循环在游玩中不断运行。 每一次循环,它无阻塞地处理玩家输入,更新游戏状态,渲染游戏。 它追踪时间的消耗并控制游戏的速度。

更新方法

定义

  • 通过每次处理一帧的行为模拟一系列独立对象。
  • 游戏世界管理对象集合。 每个对象实现一个更新方法模拟对象在一帧内的行为。每一帧,游戏循环更新集合中的每一个对象。

应用

  • Unity的MonoBehaviour。

游戏循环、更新方法、组件模式,是构建游戏引擎核心的三位一体。


游戏设计模式 游戏循环 游戏循环游戏循环在游戏开发中至关重要,虽然说有游戏引擎,或者一些列框架下无需让我们自己亲手写,但是还是有必要了解一下游戏中的循环,譬如某天你用安卓的surfaceview,去写游戏,又话说直接从openGL底层开始写起,那游戏循环的设计就必不可少了。设计一个简单的游戏循环while(true) { double start = getCurrentTime(); processInp 阅读详情

相关推荐

传输数据中的双缓冲设计

java 双缓冲传输数据流

morgerton的博客 1290

【Java设计模式】游戏循环模式

游戏循环设计模式对于创建流畅和交互式游戏体验至关重要,它通过促进游戏的连续执行来实现这一目标。每个循环周期处理输入、更新游戏状态并将游戏状态渲染到屏幕上,确保在所有硬件设置上都能保持一致的性能。

道长的博客 802

双缓冲技术讲解

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云视频网址:http://edu.youkuaiyun.com/lecturer/144 首先要搞清楚计算机运行原理,计算机载运行时是将将最大的任务分解成多个任务,然后一个接一个地执行。

海洋个人博客 2万+

序列模式--游戏循环模式

理论要点 什么是游戏循环模式:将游戏的进行和玩家输入解耦,和处理器速度解耦。即每个游戏必有的主循环update的实现。 要点:关键点就是实现如何控制游戏的速度(帧率)和CPU负荷与游戏效果之间权衡。 使用场合:任何游戏或游戏引擎都拥有自己的游戏循环,因为游戏循环是游戏运行的主心骨。 代码分析1,下面我们试着一步步来实现一个游戏循环模式,看看我们游戏之所以能一直运行更新,底层到底是怎样驱使的呢? 先

疯狂的程序员 1161

双缓冲队列的设计与实现

双缓冲队列的设计与实现,多线程,c语言实现,用于提高程序运行效率

强化学习之课程学习法

课程学习是一种有计划的学习方法,模拟人类学习的过程。它通过设置逐步增加难度的任务序列,让学习系统从简单的任务开始,逐渐过渡到复杂任务。这一方法可以显著提高训练效率,避免智能体一开始就面临过于复杂的任务,从而导致学习过程困难。逐步难度增加:从简单的任务开始,逐步增加任务的难度,直到智能体能够解决最复杂的任务。动态调整:根据智能体的学习进展,动态调整任务的难度,保证学习的过程始终处于一个适当的挑战性范围。

m0_64087341的博客 2695

游戏设计模式阅读笔记8——序列模式(游戏循环)

一、意图 将游戏的进行和玩家的输入解耦,和处理器速度解耦。 二、动机 一个真实游戏循环的第一个关键部分:它处理用户输入,但是不等待它。循环总是继续旋转。 使用实际时间来测算游戏循环运行的速度,就得到了帧率FPS。 一个简单的while循环是能转多快转多快。两个因素决定它的帧率: 1.每帧需要做的工作。(复杂的物理,众多需要渲染的对象......) 2.底层平台的速度。更快的芯片可以在同样的时间里执行更多的...

林深藏却云门寺 1028

VSCode+Typst零配置写作指南:5分钟搞定论文排版环境(含实时预览技巧)

本文介绍如何利用VSCode和Typst快速搭建零配置的论文排版环境,5分钟内实现高效写作与实时预览。Typst作为轻量级排版工具,结合LaTeX的精度与现代化语法,显著提升学术写作效率,特别适合需要频繁调整格式的研究人员。

weixin_30642561的博客 109

游戏设计模式阅读 - 游戏循环

了解游戏循环在游戏开发中的必要性与实现概念

qq_51613678的博客 1465

用C#语言实现记事本

本次程序设计作业为用C#语言设计一个记事本,设计的记事本应与电脑系统自带的记事本类似,最后实现的界面及功能应类似于下图。

qq_57738695的博客 2847

当Kmer遇到多倍体:复杂基因组Survey分析中的避坑指南

本文针对小麦、棉花等多倍体及高杂合复杂基因组的Survey分析,深入解析了Kmer分布图解读中的常见陷阱。文章重点探讨了如何超越理想二倍体模型,利用Smudgeplot等工具准确判断基因组倍性,并提供了从参数优化、污染判断到结果验证的全流程实战指南,帮助研究者规避错误,获得更准确的基因组大小、杂合度等关键信息。

yhn45678901的博客 1008

Double-Buffer双缓冲——游戏编程模式(下)

不单单是对图形绘制 这个核心的问题是双缓冲解决了区块被访问时不能被修改的问题。这里有两个通用的情况。我们通过图形绘制的例子已经讲了第一种情况——区块被另外一个线程直接的访问或中断。 这里有另外一个相同的例子,思考:当代码在做修改操作,并且在相同的地方存在访问。它可以存在一个可变的地方,尤其是物理和AI中,这种情况,你已经进入和其他物体的交互中。双缓冲通常是有帮助的。 人工低能 我们

Spice的博客 1535

thinkphp6/8 - 实现评论区发表评论、回复评论功能数据库表设计与整个逻辑思路过程分析,tp5 评论盖楼等功能(附带源码稍加改造即可使用)

tp5评论区数据库表设计,tp5发表回复评论功能设计,thinkphp5如何做评论功能,tp5 php评论区实现发表回复删除评论,tp5评论区盖楼源码及数据表设计思路,thinkphp评论功能详细教程,thinkphp实现评论与回复功能,thinkphp实现文章评论和回复评论功能,tp5实现评论回复功能,thinkphp如何实现评论区,tp5网站PC移动端h5怎么做评论区发表留言及回复功能,thinkphp实现评论区插件,thinkphp评论区相互发表回复功能详细教程,thinkphp有没有评论区的组件插件

✅ 精选推荐文章 3159

浅谈双缓冲技术在游戏里面的应用【java】

窗体类有两种Frame、JFrame两种格式。 需要注意的是,他们都需要导入相关的包。如果是Frame格式,需要添加如下代码(导入相关的包): import java.awt.Frame; 如果是JFrame格式,需要添加如下代码(导入相关的包): import java.awt.JFrame; 如果使用双缓冲技术,需要在Frame格式(jdk 1.8在JFrame没成功)的情况下添加如下代码 #...

时间静止 997

嵌入式面试题精选100道及参考答案(4万字长文)

指针是C语言中一种特殊的变量,它存储的是另一个变量的内存地址。指针的使用提供了一种间接访问和操作内存的方法。地址操作:通过使用运算符,可以获取变量的地址,并将这个地址赋值给指针变量。间接引用:使用运算符可以访问指针指向的变量的值。动态内存分配:指针用于动态地分配和释放内存。数组操作:指针可以用于遍历和操作数组。函数参数:指针作为函数参数可以改变原始数据。字符串操作:在C语言中,字符串通常以字符数组的形式存在,并通过字符指针进行操作。// 指向数组的第一个元素i < 5;++i) {在这个例子中,

大模型大数据攻城狮的专栏 1971

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2580

游戏设计模式学习笔记(17)备忘录模式

游戏设计模式学习笔记(17)备忘录模式 参考: 《设计模式与游戏完美开发》 《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN) 《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns) 【游戏设计模式】浅墨_毛星云: http...

l773575310的博客 253

【华为OD技术面试手撕真题】25、验证IP地址 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

验证IP地址 华为od机试真题,华为OD技术二面,华为od机考,华为od手撕真题,华为od技术二面,华为od机试,华为OD机试的高频手撕代码题,华为od八股文

KJ.JK 4043

角色移动的步长、步速与滑步现象

滑步只跟步长有关,就是一轮人物行走(或跑步)实际移动的像素。当然国产游戏大多做的不好。大多数根本不去认真做人物行走的播放程序,简单一帧帧播放动画,并随意移动小人在地图上的位置了事。防止滑步又可以随意改变人物移动速度的方法是这样的:将走路的程序用步长和步速两个量来控制。步长必须定死,按做出来的图片中小人一组动画下来,移动的像素为准。步速是任意的,可以用游戏每帧或每 1/100 秒,人物移动的像素数来

1566

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

序列模式--双缓冲模式

理论要点 什么是双缓冲模式:用序列的操作模拟瞬间或者同时发生的事情。通俗地讲就是一个后台缓冲来接受数据,当填充完整后交换给前台缓冲,这样就保证了前台缓冲里的数据都是完整的。 要点: 1,一个双缓冲类封装了一个缓冲:一段可改变的状态。这个缓冲被增量的修改,但我们想要外部的代码将其视为单一的元素修改。 为了实现这点,双缓冲类需保存两个缓冲的实例:下一缓存和当前缓存。 2,当信息从缓冲区中读取,

疯狂的程序员 2003

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

游戏设计模式阅读笔记9——序列模式(更新方法)

简单的更新,会堆积在游戏循环代码中。随着需要更新的对象越来越多,循环就会越来越杂乱无章。更新方法就是用来优化这个简单的循环逻辑。

林深藏却云门寺 547

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《游戏程序设计模式》 2.1 - 双缓冲

为什么80%的码农都做不了架构师?>>> ...

weixin_34133829的博客 191

游戏编程模式之游戏循环

实现用户输入和处理器速度在游戏行进时间上的解耦。 (摘自《游戏编程模式》) 游戏作为一个实时互动软件,实时是其核心。在程序里,总有那么一段代码一直在软件运行周期里不断重复着以监听着用户的输入,并根据输入进行对应的响应,这就是游戏循环代码。要注意的是,在游戏循环中不会出现类似UI事件循环中的阻塞,即使你不输入,游戏依旧在运行着游戏循环。 试着将游戏逻辑简化为输入处理ProcessInput()、逻辑更新LogicUpdate()、画面渲染Render()、物理更新PhysicUpdate()三个部分(事实.

ZhuSenlin的博客。 2164

CocosCreator编辑器界面

1,资源管理器【参考来源:官方文档】 资源管理器里显示了项目资源文件夹(assets)中的所有资源。这里会以树状结构显示文件夹并自动同步在操作系统中对项目资源文件夹内容的修改。您可以将文件从项目外面直接拖拽进来,或使用菜单导入资源。 注:只有放在项目文件夹的assets目录下的资源才会显示在这里。 左上角的按钮是创建按钮,用来创建新资源。 右上的文本输入框可...

weixin_30907935的博客 4347

Game Programming Patterns-架构,性能与游戏

《Game Programming Patterns》游戏编程模式的第二篇; 在我们埋头研究一堆的设计模式之前,我想先告诉你,对于软件架构,我个人是如何理解的。这样可以帮你对后续的文章有更好的理解。或者,当你跟别人争论一个软件架构或者设计模式是优秀还是糟糕的时候,这些都可以给你提供一些论据。

AutoVision (by 仙道菜) 3909

四种常见游戏循环实现方式

最基本的游戏循环bool game_is_running = true; while(game_is_running){ update_game()执行; display_game(); } 问题在于上述简单循环没有时间处理部分。 关于游戏循环事件的术语: FPS:FPS是Frames Per Second的缩写。在上述实现的上下文中,它是每秒调用display_...

ZhuSenlin的博客。 4515
上一篇: 游戏设计模式学习笔记(6)状态模式
下一篇: 游戏设计模式学习笔记(8)行为模式(字节码、子类沙箱、类型对象)
ChiLi_Lin
博客等级 码龄12年 760粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值