游戏引擎 订阅
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1] 展开全文
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1]
信息
属    性
程序或者组件
外文名
Game Engine
用    途
游戏
中文名
游戏引擎
游戏引擎功能
可见,引擎并不是什么玄乎的东西,无论是2D游戏还是 3D游戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节,以下就对引擎的一些关键部件作一个简单的介绍。首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。其次是动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快,子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个3D物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保了当你撞在墙上的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探测会根据你和墙之间的特性确定两者的位置和相互的作用关系。渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于管理客户端与服务器之间的通信。通过上面这些枯燥的介绍我们至少可以了解到一点:引擎相当于游戏的框架,框架搭好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。因此,在3D游戏的开发过程中,引擎的制作往往会占用非常多的时间,《马克思·佩恩》的MAX-FX引擎从最初的雏形Final Reality到最终的成品共花了四年多时间,LithTech引擎的开发共花了整整五年时间,耗资700万美元,Monolith公司(LithTech引擎的开发者)的老板詹森·霍尔甚至不无懊悔地说:“如果当初意识到制作自己的引擎要付出这么大的代价的话,我们根本就不可能去做这种傻事。没有人会预料得到五年后的市场究竟是怎样的。”正是出于节约成本、缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏,一个庞大的引擎授权市场已经形成。其中最大的收益者是各大网络游戏公司,通过第三方引擎开发的网络游戏获益巨大。但随着市场急剧变化,用第三方引擎开发网络游戏的成本也越来越高。于是游戏引擎开发商们开始绞尽脑汁设计一种可以大量节约开发成本和周期的引擎。直到2010年zerodin引擎开发的巨作Dragona出品引起了各大游戏业巨头关注,因为此时方才发现了巨作也可以用这么少的成本,这么短的时间开发而成。
收起全文
精华内容
下载资源
问答
  • 2022-03-31 19:22:44

    什么是游戏引擎

    游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节。

    以上来自百度百科,听起来很牛,上次听到这么牛的描述还是上次…

    游戏引擎简言之是游戏开发过程的凝练,没有游戏引擎,硬撸代码也可以做一个游戏,但是性价比太低,所以把游戏引擎当做是一个辅助游戏开发的工具,事情就简单了。

    既然是辅助工具,为什么说它重要,因为可以简化流程,批量优化游戏效果和运行效率,甚至是自动化量产游戏,好的游戏引擎架构就好比一个优秀的工业流水线,未来,甚至可能像工业自动化一样自动量产游戏。

    阴影PBR,流体傅立叶,…,这些听起来就很数学很物理的概念,确实可以完善输出更优的引擎,但是也不是必须的,不要光照不要仿真行不行,必须行,极简风也很酷,热爱游戏,想做引擎,但被这些概念劝退的话就太对不起热爱了,由简至繁,万物皆是如此。

    游戏引擎模块划分

    按类型可分为:渲染引擎,物理引擎,…

    按功能可分为:地形系统,模型系统,动画系统,特效系统,UI系统,材质系统,…

    按XXX可分为:xxx,xxx,…

    真的有全面概括模块的划分大法吗,个人觉得并没有,想凹怎么都能凹出来个分类法,但是好像又没必要,不同类型游戏所用到的引擎侧重点不同,划分方式也不尽相同,不同的群体对功能模块的划分也不同,不可一概而论,这里好像在写废话,但是只是想表达多了解多学习,按照现实世界去描绘游戏世界,有一个自己的概念,不要一上来就被模块的概念限制住想象。

    常见的游戏引擎

    游戏引擎分为商业引擎和自研引擎,商业引擎比较出名的如Unity、UE等,提供编辑器,有完备的流程文档,帮助游戏团队快速制作游戏,按照公司规模、盈利情况等收费,自研引擎就是自己写一套引擎框架,往往需要有一票人去开发维护优化,代价更大,对于规模小的公司来说就很吃老本,毕竟收益没那么快。

    碎碎念

    做游戏引擎开发有几年了,时间说长不长说短不短,总是想写点什么,可是每次提起笔来就突然忙碌,今年时间还早,给自己立个flag,把这个游戏引擎开发系列坚持写下去,每个月至少四篇,可能是模块简介,可能是某一个具体技术点,也可能是杂谈,旨在让更多热爱游戏的人了解游戏开发~

    更多相关内容
  • C/C++的游戏引擎多如牛毛,今天推荐一款使用python语言的游戏引擎.专为U3D打造的游戏服务器引擎
  • 本书主要介绍如何利用3D固定流水线编写游戏引擎,以及在已编写引擎的基础上开发游戏,全书共分10章,主要内容包括游戏引擎简介、数学知识、材质和光照、固定流水线、游戏引擎架构、3D引擎底层封装、3D引擎封装、游戏...
  • 本书涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗。虽然书中采用的例子通通常依据一些专门的技术,但是讨论范围远超于某个...
  • Game Engine Architecture英文翻译版,译者很用心,批注详细全面,深入理解游戏引擎架构很好的书籍,建议购买《游戏引擎架构》原书籍学习。
  • 游戏引擎源码

    2018-05-09 23:37:08
    用javascript做的游戏引擎,用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用...
  • 游戏引擎架构2

    2016-04-19 17:21:51
    游戏引擎架构2
  • 游戏引擎架构

    热门讨论 2016-04-06 14:33:23
    游戏引擎架构》同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗。虽然书中采用的例子通常依据一些专门的技术,但是讨论...
  • 游戏引擎架构 PDF电子书带书签目录 完整版 PDF 分两部分,需要一起解压
  • 游戏引擎架构 PDF电子书带书签目录 完整版.part2(共2卷)
  • 1. 游戏引擎框架介绍 「游戏引擎 浅入浅出」是一本开源电子书,Github地址: https://github.com/ThisisGame/cpp-game-engine-book 目前市面上的游戏引擎比较多,商用的有UE/Unity,开源的有OGRE/Cocos等。 多年前...

    在这里插入图片描述

    「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 
    

    目前市面上的游戏引擎比较多,商用的有UE/Unity,开源的有OGRE/Cocos等。

    多年前,每个游戏公司都有自己的专有引擎,背靠优秀的引擎技术,可以将产品打磨的更加流畅,画面可以做的更加绚丽。

    例如13年网易 蜗牛等厂商进军手游,将一大票小型游戏公司压在脚下,又例如今腾讯做出的PUBGM/CODM等超大场景,无不依赖强劲的引擎技术支持。

    各大游戏引擎都有着自己的独特之处,相对其他游戏引擎而言,我比较熟悉Unity。

    所以后续开发都会学习Unity的一些思想,一些知识点也以Unity进行举例,方便大家进入状态。

    展开全文
  • 游戏引擎 浅入浅出」项目介绍

    千次阅读 2022-04-13 01:05:44
    本书以实际项目开发Timeline,完整介绍一个游戏引擎的所有模块,从最基础的OpenGL环境搭建,到骨骼动画、多线程渲染、阴影实现等等,最后实现一个完整的游戏引擎。 章节内容 Chapter 第 1 章介绍游戏引擎框架,以...

    在这里插入图片描述

    「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 
    

    项目介绍 README

    本书以实际项目开发Timeline,完整介绍一个游戏引擎的所有模块,从最基础的OpenGL环境搭建,到骨骼动画、多线程渲染、阴影实现等等,最后实现一个完整的游戏引擎。

    在这里插入图片描述

    章节内容 Chapter

    第 1 章介绍游戏引擎框架,以Unity为例,介绍游戏引擎组成。

    第 2 章介绍OpenGL开发环境搭建,创建一个OpenGL空窗口来入坑。

    第 3 章介绍使用OpenGL绘制三角形、正方形、立方体,来熟悉游戏渲染的最基础元素。

    第 4 章介绍Shader的概念,编译链接,以及Shader格式、关键字。

    第 5 章介绍贴图格式,从直接读取PNG、JPG渲染,然后介绍GPU所使用的的压缩纹理。

    第 6 章介绍索引与缓冲区对象,索引就是多个顶点的下标,使用索引可以复用顶点渲染。而缓冲区则是将顶点数据存储于显存中,不用再每一帧都从内存上传到GPU。

    第 7 章介绍引擎自定义的Mesh文件格式以及材质的组成。将原来写死在代码中的顶点数据存储到Mesh文件中,将原来写死在代码中的Shader参数存储到材质中。

    第 8 章介绍使用Blender制作模型并编写Python代码导出为Mesh文件。

    第 9 章介绍如何实现GameObject-Component模式。

    第 10 章介绍什么是相机,以及多相机渲染排序。

    第 11 章介绍获取鼠标、键盘输入。

    第 12 章介绍如何将Demo代码,拆分为引擎源码与项目源码。

    第 13 章介绍使用FreeType对指定字符生成单Alpha通道的纹理并渲染,以及使用顶点色实现彩色文字。

    第 14 章介绍基础GUI控件的实现,包括UIImage、UIMask、UIText、UIButton。有了这几个基础,可以实现其他复杂的控件。

    第 15 章介绍使用FMOD播放MP3、Wav音乐,以及使用FMOD专业音频编辑器制作音效与解析播放。

    第 16 章介绍easy_profiler这个C++性能分析库。

    第 17 章介绍使用Sol2这个开源库,将Lua集成到引擎,后续使用C++开发引擎,使用Lua编写测试代码。

    第 18 章介绍骨骼动画原理,并介绍使用Blender制作骨骼动画、导出到skeleton_anim文件,在引擎解析。

    第 19 章介绍骨骼蒙皮动画,在Blender刷权重,导出到weight文件,在引擎解析,渲染。

    第 20 章介绍如何从FBX文件导出Mesh、骨骼动画、权重,实例导出古风少女并渲染。

    第 21 章介绍多线程渲染,将OpenGL API放到单独的渲染线程,从主线程发命令到渲染线程,将DrawCall的影响分出去,减轻主线程负担。

    第 22 章介绍不定时更新。

    特性列表 Feature

    写这本书的目的是普及游戏引擎基础知识,面向的读者有一定的Unity经验,对引擎某些点感兴趣即可。

    每一章节介绍的知识点,都是供入门了解,并没有深挖。

    简单、容易上手、短期目标、不枯燥,是这本书的追求的,太复杂的很容易中途放弃,我花了很多时间在这个上。

    容易上手

    • 每一篇都从入门角度编写,一些名词,能和其他名词关联的我都会尽量关联。
      例如Shader的编译与Link,我用C语言的编译来对比。

      C语言Shader
      目标硬件CPUGPU
      编译流程创建项目创建GPU程序
      创建多个代码文件创建Shader对象(顶点Shader和片段Shader)
      编写多个代码上传Shader源码到Shader对象
      编译代码编译Shader
      添加到链接列表添加到链接列表
      链接链接
    • 每一小节开头就贴上了这一节项目地址,把文件夹拖到CLion里面立即可以调试。
      在这里插入图片描述


    • 代码片段开头标注这个代码所在文件以及行数。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYOGQ7gl-1649783122343)(imgs/ieg_open_source/code_file_line.jpg)]

    内容全面

    从最简单的三角形绘制,到骨骼动画渲染、灯光阴影、多线程、物理、寻路AI、音频解析都会进行介绍。

    引擎生态

    这应该是首次在引擎书里教如何建模、音频编辑。

    Blender建模、FMOD、WWise音频制作,我都录制了视频。

    其他的Substance、Toolbag插件开发,Renderdoc DrawCall分析都有简单介绍。

    在这里插入图片描述

    短期目标

    渲染的模型动画用美女、帅哥、色彩丰富的物体,更有成就感。

    有了一定功能后,就会基于现有功能开发一个小游戏,阶段性成就才能长时间坚持。

    在这里插入图片描述

    快速上手 Getting Start

    阅读图书

    在线阅读:http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md

    本地阅读,按照下面步骤:

    1. 安装GitBook

    2. 克隆项目:git clone https://github.com/ThisisGame/cpp-game-engine-book.git

    3. 双击gitbook_serve.bat启动本地GitBook服务器,成功后,打开浏览器访问http://localhost:4000,即可阅读。

    随书项目调试

    1. 安装CLion。
    2. 在每小节开头找到CLion项目目录,用CLion打开。

    常见问题 FAQ

    书中讲述的引擎技术适用哪些系统平台?

    目前适配Windows与MacOS。

    - 由于Arm版Mac只支持OpenGL Core,所以《6.2 OpenGL Core Profile》之前的章节实例无法在Arm版Mac运行。
    

    为何不使用VisualStudio?

    为了简单,CLion支持Windows与Mac。

    VisualStudio C++只支持Windows,Mac上就需要XCode,增加了学习成本。

    行为准则 Code Of Conduct

    • 引擎使用C++开发,遵从Google C++规范,贡献代码时,需要先熟悉代码风格。
      在这里插入图片描述

    • 贡献代码时,请先fork本项目到你的名下,然后修改代码,通过合并请求来提交。

    • 目前适配Windows和Mac,同样,你可以在这两个系统上开发。代码提交前,请确保功能在这两个系统上都是正常且一致的。

    如何加入 How To Join

    • 你可以直接打开在线阅读:http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md
    • 本书是开源的,你可以fork本项目,然后修改代码,然后提交合并请求。
    • 欢迎大家提Issue,反馈遇到的问题。内网可以直接联系我。也可以加入q群(879187705)讨论,得到答案后,更新issue,方便其他人查询。
      游戏引擎 浅入浅出 QQ群

    团队介绍 Members

    • captainchen:作者

    感谢支持 Thanks

    项目使用CLion IDE,使用PVS-Studio作为代码扫描分析工具,感谢其提供的开源许可。
    在这里插入图片描述

    展开全文
  • BigWorld MMO Technology Suite使游戏开发项目避免了未知、昂贵和耗时的软件研发风险,从而使授权客户能够专注于游戏制作这一核心事务。 当然最稀有的是服务器源代码,可谓秒杀全球的MMORPG的服务器引擎。非常具有...
  • 写一个游戏引擎类的头文件(.h); 写一个游戏引擎类的实现文件(.cpp); 在编程中如何调用使用游戏引擎。 一 、在VS2015中新建一个 Visual C++ 常规空项目,添加一个游戏引擎头文件实现文件。详细步骤如下: ...
    1. 写一个游戏引擎类的头文件(.h);
    2. 写一个游戏引擎类的实现文件(.cpp);
    3. 在编程中如何调用游戏引擎。

    一 、在VS2015中新建一个 Visual C++ 常规空项目,添加一个游戏引擎头文件实现文件。详细步骤如下:

     二 、游戏引擎头文件 GameEngine.h 源代码:

    #pragma once
    #include <windows.h>
    
    
    int WINAPI        WinMain(HINSTANCE hInstance,
    	HINSTANCE hPrevInstance,
    	PSTR szCmdLine,
    	int iCmdShow);
    
    LRESULT CALLBACK  WndProc(HWND hWnd,
    	UINT msg,
    	WPARAM wParam,
    	LPARAM lParam);
    
    BOOL GameInitialize(HINSTANCE hInstance);
    void GameStart(HWND hWindow);
    void GameEnd();
    void GameActivate(HWND hWindow);
    void GameDeactivate(HWND hWindow);
    void GamePaint(HDC hDC);
    void GameCycle();
    
    class GameEngine
    {
    protected:
    	//成员变量
    	static GameEngine*  m_pGameEngine;
    	HINSTANCE           m_hInstance;
    	HWND                m_hWindow;
    	TCHAR               m_szWindowClass[32];
    	TCHAR               m_szTitle[32];
    	WORD                m_wIcon, m_wSmallIcon;
    	int                 m_iWidth, m_iHeight;
    	int                 m_iFrameDelay;
    	BOOL                m_bSleep;
    
    public:
    	//构造函数/析构函数
    	GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle,
    		WORD wIcon, WORD wSmallIcon, int iWidth = 640, int iHeight = 480);
    	virtual ~GameEngine();
    
    	
    	static GameEngine*  GetEngine() { return m_pGameEngine; };
    	BOOL                Initialize(int iCmdShow);
    	LRESULT             HandleEvent(HWND hWindow, UINT msg, WPARAM wParam,
    		LPARAM lParam);
    
    	
    	HINSTANCE GetInstance() { return m_hInstance; };
    	HWND      GetWindow() { return m_hWindow; };
    	void      SetWindow(HWND hWindow) { m_hWindow = hWindow; };
    	LPTSTR    GetTitle() { return m_szTitle; };
    	WORD      GetIcon() { return m_wIcon; };
    	WORD      GetSmallIcon() { return m_wSmallIcon; };
    	int       GetWidth() { return m_iWidth; };
    	int       GetHeight() { return m_iHeight; };
    	int       GetFrameDelay() { return m_iFrameDelay; };
    	void      SetFrameRate(int iFrameRate) {
    		m_iFrameDelay = 1000 / iFrameRate;
    	};
    	BOOL      GetSleep() { return m_bSleep; };
    	void      SetSleep(BOOL bSleep) { m_bSleep = bSleep; };
    };

    三 、游戏引擎实现文件 GameEngine.cpp 源代码:

    #include "GameEngine.h"
    
    GameEngine *GameEngine::m_pGameEngine = NULL;
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
    {
    	MSG         msg;
    	static int  iTickTrigger = 0;
    	int         iTickCount;
    
    	if (GameInitialize(hInstance))
    	{
    		// 初始化游戏引擎
    		if (!GameEngine::GetEngine()->Initialize(iCmdShow))
    			return FALSE;
    
    		// 进入主消息循环
    		while (TRUE)
    		{
    			if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    			{
    				// 处理消息
    				if (msg.message == WM_QUIT)
    					break;
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    			else
    			{
    				//确保游戏引擎没有处在休眠状态
    				if (!GameEngine::GetEngine()->GetSleep())
    				{
    					// Check the tick count to see if a game cycle has elapsed
    					iTickCount = GetTickCount();
    					if (iTickCount > iTickTrigger)
    					{
    						iTickTrigger = iTickCount +
    							GameEngine::GetEngine()->GetFrameDelay();
    						GameCycle();
    					}
    				}
    			}
    		}
    		return (int)msg.wParam;
    	}
    
    	// 结束游戏
    	GameEnd();
    
    	return TRUE;
    }
    
    LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	// 将所有Windows消息路由到游戏引擎
    	return GameEngine::GetEngine()->HandleEvent(hWindow, msg, wParam, lParam);
    }
    
    //-----------------------------------------------------------------
    // 游戏引擎的构造函数/析构函数
    //-----------------------------------------------------------------
    GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass,
    	LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight)
    {
    	// 设置游戏引擎的成员变量
    	m_pGameEngine = this;
    	m_hInstance = hInstance;
    	m_hWindow = NULL;
    	if (lstrlen(szWindowClass) > 0)
    		lstrcpy(m_szWindowClass, szWindowClass);
    	if (lstrlen(szTitle) > 0)
    		lstrcpy(m_szTitle, szTitle);
    	m_wIcon = wIcon;
    	m_wSmallIcon = wSmallIcon;
    	m_iWidth = iWidth;
    	m_iHeight = iHeight;
    	m_iFrameDelay = 50;   // 游戏周期,一般设为20帧/秒
    	m_bSleep = TRUE;
    }
    
    GameEngine::~GameEngine()
    {
    }
    
    
    BOOL GameEngine::Initialize(int iCmdShow)
    {
    	WNDCLASSEX    wndclass;
    
    	// 为主窗口创建窗口类
    	wndclass.cbSize = sizeof(wndclass);
    	wndclass.style = CS_HREDRAW | CS_VREDRAW;
    	wndclass.lpfnWndProc = WndProc;
    	wndclass.cbClsExtra = 0;
    	wndclass.cbWndExtra = 0;
    	wndclass.hInstance = m_hInstance;
    	wndclass.hIcon = LoadIcon(m_hInstance,
    		MAKEINTRESOURCE(GetIcon()));
    	wndclass.hIconSm = LoadIcon(m_hInstance,
    		MAKEINTRESOURCE(GetSmallIcon()));
    	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    	wndclass.lpszMenuName = NULL;
    	wndclass.lpszClassName = m_szWindowClass;
    
    	// 注册窗口类
    	if (!RegisterClassEx(&wndclass))
    		return FALSE;
    
    	// 根据游戏大小计算窗口大小和位置
    	int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2,
    		iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2 +
    		GetSystemMetrics(SM_CYCAPTION);
    	if (wndclass.lpszMenuName != NULL)
    		iWindowHeight += GetSystemMetrics(SM_CYMENU);
    	int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN) - iWindowWidth) / 2,
    		iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight) / 2;
    
    	// 创建窗口
    	m_hWindow = CreateWindow(m_szWindowClass, m_szTitle, WS_POPUPWINDOW |
    		WS_CAPTION | WS_MINIMIZEBOX, iXWindowPos, iYWindowPos, iWindowWidth,
    		iWindowHeight, NULL, NULL, m_hInstance, NULL);
    	if (!m_hWindow)
    		return FALSE;
    
    	// 显示并更新窗口
    	ShowWindow(m_hWindow, iCmdShow);
    	UpdateWindow(m_hWindow);
    
    	return TRUE;
    }
    
    LRESULT GameEngine::HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	// 将Windows消息路由到游戏引擎成员函数
    	switch (msg)
    	{
    	case WM_CREATE:
    		// 设置游戏窗口并开始游戏
    		SetWindow(hWindow);
    		GameStart(hWindow);
    		return 0;
    
    	case WM_SETFOCUS:
    		//激活游戏并更新睡眠状态
    		GameActivate(hWindow);
    		SetSleep(FALSE);
    		return 0;
    
    	case WM_KILLFOCUS:
    		// 停用游戏并更新睡眠状态
    		GameDeactivate(hWindow);
    		SetSleep(TRUE);
    		return 0;
    
    	case WM_PAINT:
    		HDC         hDC;
    		PAINTSTRUCT ps;
    		hDC = BeginPaint(hWindow, &ps);
    
    		// 绘制游戏
    		GamePaint(hDC);
    
    		EndPaint(hWindow, &ps);
    		return 0;
    
    	case WM_DESTROY:
    		// 结束游戏并退出应用程序
    		GameEnd();
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hWindow, msg, wParam, lParam);
    }

    四 、调用游戏引擎,添加一个要做的游戏应用文件 FIRSTGAME.cpp 源码如下:

    #pragma once
    
    #include <windows.h>
    #include "Resource.h"
    #include "GameEngine.h"
    
    GameEngine* g_pGame;
    
    BOOL GameInitialize(HINSTANCE hInstance)
    {
    	// 创建游戏引擎
    	g_pGame = new GameEngine(hInstance, TEXT("第一个游戏"),
    		TEXT("第一个游戏"), IDI_ICON1, IDI_ICON2);
                               //IDI_ICON1, IDI_ICON2 这是建立游戏资源.ico后缀图片的ID
    	if (g_pGame == NULL)
    		return FALSE;
    
    	// 设定游戏速度为15帧/秒
    	g_pGame->SetFrameRate(15);
    
    	return TRUE;
    }
    
    void GameStart(HWND hWindow)
    {
    	
    }
    
    void GameEnd()
    {
    	// 清理游戏引擎
    	delete g_pGame;
    }
    
    void GameActivate(HWND hWindow)
    {
    	HDC   hDC;
    	RECT  rect;
    
    	// 在游戏屏幕上绘制激活文本
    	GetClientRect(hWindow, &rect);
    	hDC = GetDC(hWindow);
    	DrawText(hDC, TEXT("第一个游戏开始!"), -1, &rect,
    		DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    	ReleaseDC(hWindow, hDC);
    }
    
    void GameDeactivate(HWND hWindow)
    {
    	HDC   hDC;
    	RECT  rect;
    
    	// 在游戏屏幕上绘制激停文本
    	GetClientRect(hWindow, &rect);
    	hDC = GetDC(hWindow);
    	DrawText(hDC, TEXT("第一个游戏结束!"), -1, &rect,
    		DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    	ReleaseDC(hWindow, hDC);
    }
    
    void GamePaint(HDC hDC)
    {
    }
    
    void GameCycle()
    {
    	HDC   hDC;
    	HWND  hWindow = g_pGame->GetWindow();
    
    	// 在游戏屏幕上的任意位置绘制游戏图标
    	hDC = GetDC(hWindow);
    	DrawIcon(hDC,200,200,(HICON)(WORD)GetClassLong(hWindow, GCL_HICON));
    	ReleaseDC(hWindow, hDC);
    }
    
    

    五 、编译后运行画面:

    六 、源代码出自如下书籍资料:

    1.游戏编程精粹     作者:(美) Michael Dickheiser著

    2.游戏编程入门    作者:(美) Michael Morrison著

    展开全文
  • 在国内外,业界盛传有十大开源游戏引擎,分别是OGRE、Irrlicht、Panda3D、Crystal Space、jME、Blender Game Engine、Reality Factory、The Nebula Device 2、RealmForge、OpenScene- Graph。我们对这十款开源游戏...
  • BigWorld:服务端引擎+客户端引擎 服务端引擎:Actor并发模型+分布式AOI 该引擎是澳大利亚BigWorldPty.Ltd...其他游戏引擎:更多专注于客户端 UE4:专注于客户端 Unity 3D:有服务端,但专注于客户端 CryEngine: ...
  • 游戏引擎原理

    千次阅读 2019-05-22 10:17:15
    1.什么是游戏引擎? 考虑你喜欢的几个不同的游戏,尝试设想一下它们的内部是如何设计的。更重要的是,看一下是否能够找到适用于所有游戏的任何公共设计元素。例如,所有游戏都有背景、片头屏幕、地形图和背景音乐...
  • 游戏引擎的5+1层介绍!
  • 游戏引擎开发必读书籍,电子书最新版,强烈推荐。 Game Engine Architecture, Second Edition
  • 如果您是游戏开发人员,并且正在寻找JavaScript和html5无缝协作的游戏引擎。虽然市场上有很多免费和付费的游戏引擎,但一款让专业游戏开发者满意的游戏引擎,必须包含独特的东西,所以...
  • 我是如何学习游戏引擎的?

    千次阅读 多人点赞 2021-09-28 00:50:40
    这是【游戏开发那些事】第51篇原创前言:游戏引擎,表面上看是一个工具,实质上却是一本“技术图谱”,每一个点击行为的背后都有着其独到的意义。每一个模块都索引着数以万行的工程代码、数以百计的科...
  • 游戏引擎

    千次阅读 2018-06-05 23:22:19
    什么是游戏引擎?     机就无法跑起来,人类没有心脏就会死亡。而引擎就是发动机,就是心脏。 维基百科对于游戏引擎的定义:     游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像...
  • unity-横向比较unity3d与其他的游戏引擎的优势与不足
  • 全球及中国Metaverse游戏引擎行业发展趋势与投资策略分析报告2022-2028年 详情内容请咨询鸿晟信合研究院! 【全新修订】:2022年3月 【撰写单位】:鸿晟信合研究网 2021年全球Metaverse游戏引擎市场规模大约为 亿...
  • 2D游戏引擎开发入门(一)

    千次阅读 2022-01-23 22:37:42
    创建Windows窗口 创建一个空项目 使用VS创建一个空项目。我这里使用的是Visual Studio 2022。具体方法不再描述。 右键属性,将C++语言标准升到C++...下一章节,将会开始搭建引擎的框架来一步步实现一个完整的游戏引擎
  • Games104 Lecture 2 游戏引擎的层级架构

    千次阅读 2022-03-23 17:00:47
    目录游戏引擎层级介绍1 Resource Layer 资源层1.1 资源的获取和寻找 How to Access My Data1.2 实时资产管理 Runtime Asset Manager1.3 管理资产生命循环 Manage Asset Life Cycle2 Function Layer 功能层3 Core ...
  • Unity游戏引擎介绍及相关学习资源

    千次阅读 2019-11-26 23:54:55
    Unity(游戏引擎)一般指Unity3D 官网: https://unity.com/ 手册:https://docs.unity3d.com/Manual/ Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等...
  • 利用2D游戏引擎HGE开发的拼图游戏,适合新手学习用,内附 HGE教程和中文帮助文档 资源都在,声音文件自己加,源码可以自行改造等多关
  • Flutter 游戏引擎 flame

    千次阅读 2021-12-18 14:33:33
    Flame Engine的目标是为使用Flutter开发的游戏可能共享的常见问题提供一套完整的解决方案
  • 各大知名游戏引擎分析报告

    千次阅读 2021-08-09 10:03:09
    游戏引擎之争就像编程语言之争一样,在游戏开发圈永远是一个火爆的话题,目前市面上主流的一些游戏引擎,我们来给他们做一些比较,了解他们的历史,特点, 为了严谨,备注一下写这个文章的时间编写时间是2021年4月20...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 193,570
精华内容 77,428
关键字:

游戏引擎