游戏引擎与C++

原创 2017年03月22日 16:03:40

游戏引擎与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
版权声明:本文为Focustc原创文章,转载请注明作者及出处。

目前游戏行业内部主要几款游戏引擎的技术对比

如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最...
  • CNHK1225
  • CNHK1225
  • 2016年02月26日 10:50
  • 16779

C++游戏引擎开发

游戏引擎开发用C++实现跨平台游戏引擎开发  你是否梦想写一部格斗游戏但却无从着手呢?是否你只因游戏开发好玩而对之感兴趣?本文我们将分析一个通用的跨平台游戏引擎,每个游戏开发新手都可以自由地使用它。 ...
  • byxdaz
  • byxdaz
  • 2009年02月06日 10:18
  • 33925

十大开源游戏引擎深入比较

在国内外,业界盛传有十大开源游戏引擎,分别是OGRE、Irrlicht、Panda3D、Crystal Space、jME、Blender Game Engine、Reality Factory、Th...
  • caoshangpa
  • caoshangpa
  • 2017年06月22日 20:05
  • 5192

比较简单的2D游戏引擎C++类

//GameEngine.h文件:#pragma once#include LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, ...
  • benny5609
  • benny5609
  • 2008年04月26日 09:07
  • 3628

浅谈图形界面引擎开发 - 如何用 C++ 从零编写 GUI

本人在知乎上关于 如何用 C++ 从零编写 GUI? 问题的回答,算是比较粗浅但全面的讲解了GUI引擎的一些开发心得...
  • cz666
  • cz666
  • 2017年03月24日 10:43
  • 5932

开源搜索引擎 ( c++版)

  • 2010年03月15日 13:31
  • 158KB
  • 下载

为什么游戏引擎大多选择使用 C++ 而不是 C 开发?

作者:crazybie链接:https://www.zhihu.com/question/26591038/answer/89407866来源:知乎著作权归作者所有,转载请联系作者获得授权。在育碧干这...
  • u012798391
  • u012798391
  • 2016年10月20日 20:59
  • 677

如何自学游戏引擎的开发?

PS:题猪分得清游戏和游戏引擎的区别,所以各位答主不需要劳神解释两者的区别关系什么的了 PS:这里的游戏引擎暂时指图形模块,其他的声音,物理,网络,UI等等模块暂时不考虑 题猪一直自学编程...
  • pizi0475
  • pizi0475
  • 2015年11月02日 20:35
  • 5585

c++ 2d RPG游戏引擎实现

  • 2012年05月23日 19:42
  • 35.65MB
  • 下载

C#学习笔记:RadioButton控件与CheckBox控件的用法

一、用途 1.RadioButton控件 单选按钮,当与其他单选按钮成对出现时,允许用户从一组选项中选择单个选项。也就是说,当同一个容器中(Form、Panel、GroupBox、PictureB...
  • qq_28249373
  • qq_28249373
  • 2017年07月09日 15:41
  • 3955
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:游戏引擎与C++
举报原因:
原因补充:

(最多只允许输入30个字)