游戏引擎与C++

游戏引擎与C++

  • 参考CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"
  • 此presentation主要关注C++11在游戏引擎中的使用

游戏引擎的特点

  • 不会使用太多STD

    • 游戏的历史很久远,且对内存、cpu的使用很苛刻
    • 比如对于std::string,操作比较慢,因此更多采用cstring
    • 比如std中的模板会造成代码体积膨胀
  • 游戏引擎不会使用太多异常
    • 会关掉第三方库的exception
  • 游戏引擎不会太正规的做fix,比较随意

游戏引擎中C++11的使用

  • constexpr做编译期资源版本管理
  • static_assert做编译期类型验证
  • unique_ptr做RAII,取代auto_ptr
    • auto_ptr有拷贝语义,拷贝后源对象变得无效;unique_ptr则无拷贝语义,但提供了移动语义
    • auto_ptr不可作为容器元素,unique_ptr可以作为容器元素
  • move语义加速了标准容器的数据拷贝
  • 算法库对于raw array也适用
  • ref CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"
  • 演讲者把自己比作一把瑞士军刀,什么都能做,但是不精通,如图形渲染、数据加载和解析、游戏AI
  • std::async
  • pure:用于声明纯虚函数

参考

C++11的智能指针

  • 四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用
  • auto_ptr
    • c++98中实现
    • 赋值时p1 = p2,则p2会变成空指针,赋值其实是把p2的成员变量指针赋值给p1,并对p2调用release()
    • release()的作用是释放原指针,成员变量指针置为0,并返回源指针,不会释放资源
    • reset()的作用是成员变量指针置为0,并释放资源
    • 判断为空要使用p.get() == NULL
    • 不能放到容器中,因为容器的赋值传递会使容器中元素置位空,参考说法:
      • 容器内元素的类型约束为元素类型必须支持赋值运算(引用不支持赋值,所以引用类型不能被放入容器),元素类型的对象必须可以复制(IO库类型不支持复制或赋值,所以IO类型对象不能放入容器),对于auto_ptr这种类型来说,它的赋值和复制已不是传统意义上的概念,所以放入容器中会出现很多未定义的后果。同样在作为函数入参时,除非用const & 进行修饰,否则也会出现未定义操作。
  • unique_ptr
    • 用于取代auto_ptr,添加了move语义,并支持自定义deleter
    • 相比auto_ptr,不支持赋值和复制,但支持带有move的赋值和复制,可以使用p == NULL判断是否为空
  • shared_ptr
    • 用于共享资源
  • weak_ptr
    • 用来监视shared_ptr,解决shared_ptr相互引用时的死锁问题

作者Focustc,来自于CSDN

时间: 2024-10-01 00:23:19

游戏引擎与C++的相关文章

游戏引擎

游戏引擎概述 游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始.大部分都支持多种操作平台,如Linux.Mac OS X.微软Windows.游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎).物理引擎.碰撞检测系统.音效.脚本引擎.电脑动画.人工智能.网络引擎以及场景管理. 详细介绍,请猛戳这里...... 常见的游戏

最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程

学习游戏的目的 我们学习游戏制作,游戏开发,游戏编程,游戏XX,我们的目的只有一个,打造一个非常牛逼,非常屌,非常让人开心的虚拟体验.我们用自己的学识让玩家在虚拟世界征战,生活,一步一步的让玩家幸福!那么我们的目的只有一个,让玩家知道自己的幸福在哪里,并且学会追求自己的幸福.当然,每个人对幸福的定义不一样.那么,我们只好让玩家来体验我们所来表达的最通俗的,最普遍的幸福体验,然后慢慢引导玩家去寻找自己的幸福体验.可能,在最后玩家都会离开游戏,离开虚拟世界,(对,这是真的,玩家需要一步一步达到定点,

游戏引擎架构

游戏编程分为游戏逻辑和游戏引擎.游戏引擎是一套可重复利用的底层框架.包括渲染引擎.声音引擎.网络引擎等等.现提供一套游戏架构,从底层向上分别为: 硬件.驱动.操作系统. 第三方软件开发包:DirectX.OpenGL,Boost.STL库,Granny.Havok.Animation等. 平台独立层:集合.迭代器.文件系统.网络传输层.线程库.物理碰撞包裹类. 核心系统:模块启动终止.断言.单元测试.内存分配.数学库.调试用打印及日志.性能剖析.引擎配置.异步文件. 资源(游戏资产):三维模型资

Python游戏引擎开发(四):TextField文本类

上一章我们主要介绍了显示对象和如何显示图片.本章来讲述显示文本. 以下是本系列教程前几章地址,在阅读本篇正文之前,请务必阅读前几章内容. Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗口以及重绘界面 Python游戏引擎开发(三):显示图片 文本类TextField 使用过flash的朋友都知道,这个类其实不光是显示文本用的,还可以用于显示输入框.我这里就只实现一些基础实用的功能,以后有时间了慢慢拓展.和上一章一样,TextField是一个显示对象,继承自Displa

独立开发游戏越来越容易:Unity 发布旗下的最新游戏引擎 Unity 5,依然有免费版(转)

独立开发者开发游戏正变得越来越容易,因为在游戏设计中很多吃力不讨好的工作可以直接采用像 Epic Games 或 Unity Technologies 这样的游戏引擎来解决.而这几天,游戏引擎商们先后宣布,旗下产品将以更廉价甚至是免费的方式提供给游戏开发者们,开发游戏的门槛又进一步降低了. 先是 Epic Games 在周一通过官方博客宣布旗下 Unreal Engine 4 (虚幻引擎 4)即日起免费提供给 所有开发者使用.只有当开发者利用 Unreal Engine 4 所制作的游戏每个季度

Python游戏引擎开发(一):序

邂逅Python 写了这么久的html5,感觉html5学得差不多了,是时候去接触更多的语言来扩充自己的能力了.我先后看了Swift,Java等语言.首先开发Swift需要一台mac,对于我这个寒士而言,过于奢华了一些:Java吧,又感觉太胖了,不够苗条,身材不好,也看不上.最后遇到了Miss Python,先前也和她打过交道,不过感觉语法怪怪的,总是出现>>>这类符号(当时没有深入接触,不晓得是命令输入提示),实在是太高冷了.幸好遇见了廖雪峰大侠,在他的引荐下,我开始初步了解Pytho

游戏引擎架构学习

本书的主页第一部分 基础 第1章 导论1.1 典型游戏团队的结构 工程师:艺术家:游戏设计师:制作人:其他工作人员:发行商&工作室 1.2 游戏是什么 71.3 游戏引擎是什么 101.4 不同游戏类型中的引擎差异 111.5 游戏引擎概观 221.6 运行时引擎架构 271.7 工具及资产管道 46第2章 专业工具 532.1 版本控制 532.2 微软Visual Studio 612.3 剖析工具 782.4 内存泄漏和损坏检测 792.5 其他工具 80第3章 游戏软件工程基础 833.

G3D游戏引擎——编译

在支付宝半年了,都是在写Java的核心业务处理,感觉离技术越来越远,所以重新捡起C++,开始游戏引擎的研究,这次选择的游戏引擎是G3D,环境是Mac. 这里的编译我选择的是g++,写一个小的实例,可以选择自带的sample的程序,编译的时候花费了我5个多小时才完成,需要下载jpeg,png等许多依赖的库. 这里将整个编译的的命令行贴出来,给无法编译G3D的童鞋一点参考,其中的一些依赖文件的路径你需要换成自己的环境. g++ -g app.cpp -o main -stdlib=libstdc++

Android 8款开源游戏引擎

1.Angle  (2D    Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发.该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程. 最低运行环境要求不详. 项目地址:http://code.google.com/p/angle/ 2.Rokon  (2D    Java) rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开

1.Phaser游戏引擎介绍

国外免费开源的2D游戏引擎 支持平台 IE9+ 火狐 谷歌 safari 移动端IOS5+ Android2.2+ 可以用cocoonJS打包 支持WEBGL和canvas(两者自动切换) 简单易用的加载系统 完善的动画系统 丰富的用户交互事件(最多10个点的数控) 支持HTML5 audio 和web audio两种声音模式 内置3个物理引擎 也支持typescript 开发准备 phaser.js文件 phaser的文档和示例 前两者都可在GitHub上找到 顺手的编辑器(sublime.w