【转载】浅析游戏引擎开发

游戏引擎开发 在游戏程式的领域中,经常会听到GameEngine(游戏引擎)这个东西。是否是听起来是个很炫很酷的名词?实际上游戏引擎一词它经常被过度泛称与误用。经常听到的游戏引擎架构,是由低阶(Low-Level)至高阶(High-Level)可细分为以下三个层级(Layer):   1.绘图API(例如:DirectX与OpenGL)   2.绘图引擎(例如:OGRE、Renderware与Game... 阅读详情

浅析游戏引擎开发

1  引言
电脑游戏作为一种娱乐方式越来越为人们所接受。即时通讯开发对于电脑游戏来说, 游戏引擎是用于控制游戏功能的
主程序, 如接受玩家控制信息的输入, 选择合适的声音以合适的音量播放等。2D 游戏或者3D 游戏, 不管游
戏是怎样的形式(是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏) 都有类似的起控制作
用的代码。游戏引擎相当于游戏的框架, 框架打好后, 关卡设计师、建模师、动画师可往里填充内容。
2  需求分析
游戏引擎是一个很复杂的系统, 在这个设计中主要涉及到了以下几项功能:
(1) 光影处理: 光影处理是用来处理游戏场景中光源对游戏中的人、地、物所影响变化的效果。
(2) 物理系统: 用于模拟现实生活中的物体物理运动的一个系统。
(3) 碰撞检测: 碰撞检测在游戏引擎中如此重要, 原因是现实生活中随处都有碰撞的发生。
(4) 画影成像: 这是游戏引擎一项必不可少的功能, 否则在游戏中将看不到游戏的图像。
(5) 输入与输出: 提供给玩家与游戏交互的功能, 这也是游戏与电影的区别。
3  系统设计
311  功能设计
作为一个游戏引擎, 它必须是可用的、稳定的、可维护的。它的主要功能有如下几点:
(1) 图像处理: 曲线绘制, 图像成像, 阴影生成, 粒子效果。
(2) 输入处理: 鼠标和键盘数据处理, 游戏文件装载, 脚本读取。
(3) 输出处理: 游戏信息输出, 玩家信息显示, 游戏存档建立, 音乐、音效输出, 图像输出。
(4) 游戏逻辑处理: 控制剧情发展, 控制人物移动, 控制画面显示。
312  结构设计
游戏引擎开发采用的是三层结构模型:
第一层是游戏引擎的基础, 它包括图像处理系统, 输入输出系统和音乐、音效系统。
第二层是接口层, 设定上层与底层的访问接口。
采用接口技术的好处就是更新底层实现的时候, 只要接口不被修改, 那么就不需要改动上层代码, 实现
系统层次化结构提高了系统的可维护性与可重用性。
·55 ·
第三层是游戏工具库, 在这里提供了游戏开发的一些辅助工具, 主要是封装了一些对底层实现的操作。
它包括地图编辑器、脚本解析器、人物对话模块、角色类、NPC 类和物品类等等一些在游戏中用到的模块。
313  游戏引擎的IPO 图
图1  IPO 图
图2  引擎整体结构图
4  系统实现
411  引擎开发基础和开发环境配置
41111  引擎开发工具的选择
在本次开发游戏的引擎开发中, 我们使用DirectXSDK开发包与VC + + 610 编译器。
41112  游戏开发的核心知识
游戏开发需要多方面的知识, 它包括很多非计算机专业和计算机专业方面的知识。开发一个游戏引擎,
最基本的数据结构的知识是必不可少的, 如队列、堆栈、数组、链表、树、递归等等。
数字建模是数学的术语, 也是计算机游戏的术语。一般情况下游戏中的每一个对象, 人物、动物和植物
包括水、气体等非生物都要进行数字建模。
412  引擎图像子系统的实现
41211  采用图片拼接的方式来编辑地图, 将待绘页面分成n 个单元格, 在每个单元格中贴入我们想要的对
象部分, 贴入后设置该图块的属性。
41212  图像子系统的功能分析
需求: 实现2D 贴图、地图合成、序列动画、基本图形图像绘制、屏幕渲染、画面显示、粒子系统。
413  引擎的输入输出子系统与声音控制子系统
·56 ·
41311  输入输出方式
在windows 中获取鼠标和键盘信息是使用消息方式来获取的。在游戏中, 同样也是使用消息方式来获取
键盘和鼠标信息。因为, 游戏的输入不仅由用户来提供操作键盘和鼠标消息, 有时候比如在剧情发展的时
候, 需要虚拟键盘和鼠标消息来自动化游戏的进行; 有时我们要对键盘和鼠标的消息进行处理来实现一些效
果, 比如当鼠标移动到屏幕的边缘时, 我们要滚动地图。这样就必须实现实时的截获鼠标和键盘消息, 然后
处理。
41312  输入输出子系统的实现步骤
在这里使用的是DirectX 的DirectInput 库来完成输入消息截取的。游戏的运行过程大致可以分成擦除、
移动、绘制、等待、重复这几个步骤。
确定了在什么位置获取输入后, 接下来就要看具体的实现过程了。DirectInput 和DirectDraw 一样是虚拟
设备, 也就是说不管底层的硬件是如何实现的, 只要符合标准的接口, 都可以通过DirectInput 来获取输入。
DirectInput 的实现过程是Win32 应用程序→Direct 输入→HEL (硬件仿真层) 或HAL (硬件抽象层) →硬件设
备驱动→设备。理论上DirectInput 可以支持所有的输入设备如鼠标、键盘、游戏摇杆、方向盘、踏板等, 但
在本文中用到的只有键盘和鼠标, 所以只要获取键盘和鼠标消息即可。
下面是设置DirectInput 的基本步骤:
(1) 通过调用DirectInput8Create ( ) 来创建IDirectInput 接口, 返回值是IDirectInput8 接口。
(2) 查询设备的GUID
(3) 调用CreateDevice () 传递一个GUID : GUID SysKeyBoard 主键盘的GUID ; GUID SysMouse 主鼠标的
GUID。
(4) 设置设备的协作等级, 通过调用IDirectInputDevice8 : : SetCooperativeLevel () 来完成。
(5) 调用SetDataFormat () 来设置每一个设备的数据格式。
(6) 使用IDirectInputDevice8 : : SetProperty () 设置你想要的任何设备的性能。
(7) 调用IDirectInputDevice8 : : Acquire () 来获取设备, 即与设备关联。
(8) 调用IDirectInputDevice8 : : GetDeviceState () 来获取设备的数据, 在这里有两种方式实现数据采集方
式, 一是直接模式; 二是缓存模式。
41313  声音子系统实现的步骤
实现音乐和音效处理, 我们用到的是Directx 中的DirectSound 和DirectMusic 库。DirectSound 是控制音效
的, DirectMusic 是控制音乐播放的, 它是一种新的基于DLS 数据的实时音乐编排和回访技术。
操作DirectSound :
(1) 初始化DirectSound , 声明DirectSound 对象, 调用DirectSoundCreate ( ) 创建DirectSound 对象。
(2) 设定协作等级, 调用SetCooperativeLevel () 函数, DirectSound 一共有四个协作等级: 普通级、优先
级、排他级和Write Primary 级。
(3) 建立缓冲, 声明DirectSound 缓冲, 调CreateSoundBuffer () 来创建缓冲对象。
(4) 把声音写入缓冲, 锁定( Lock () ) 、写入、解锁( Unlock () ) 。
(5) 控制声音播放: 播放声音, 调用play () 函数; 停止播放声音, 调用stop () 函数; 控制音量, 调
SetVolume () 函数; 调整频率, 调用SetFrequency () 函数; 改变声道平衡, 调用SetPan () 函数。
414  游戏工具库开发
41411  地图编辑器与脚本解析器的概述
地图编辑器与脚本解析器是游戏开发的重要工具, 它们综合利用底层的操作来实现游戏开发过程中比较
高级的功能。
41412  地图编辑器的作用与功能介绍
地图编辑器主要的功能是创建、编辑和保存游戏场景地图文件。游戏场景地图一般分为三层结构, 地面
层、物体层、天空层。地面层是用来贴入游戏场景的最底层图片的, 如土地, 沙漠, 草地这些都可以归结到
·57 ·
地面层; 物体层在这里不单单是一层, 物体层可分为上层和下层, 上层的物体可以遮挡人物, 下层的物体可
以阻挡人物, 所以在设计中把人物定位在物体的下层; 天空层是用来作效果处理的, 如想实现天黑效果, 你
不得不在物体层的上面加上一张黑色图片。创建一张游戏场景地图主要有以下几个步骤: (1) 装载进入背景
图; (2) 显示背景图; (3) 在图上画出格子; (4) 在某一格子贴入确定的景物; (5) 设置景物属性; (6) 保
存地图
41413  地图编辑器技术实现
41414  脚本解析器技术实现
5  测试
在游戏引擎开发完之后, 游戏的创作就由设计师与美工来完成。首先, 创作游戏剧本, 确定了剧本之
后, 我们就要对剧本进行分镜处理, 确定在什么场景出现什么人物, 和什么样的人物有什么样的对话; 其
次, 使用地图编辑器来制作游戏场景地图; 最后, 编写游戏的脚本文件, 编写时要确定关卡和事件发生地
点, 人物对话就按分镜处理后的剧本就可以了。
6  结论
综上完成了一个通用的2DRPG游戏引擎的基本功能。该引擎的主要特点是采用了模块化设计思想来构
建引擎的底层程序, 因此该引擎具有较强的扩展性和可维护性。该引擎的工具库具有高度的可重用性, 只需
经过少许的改动就可以适应新格式地图的编辑。该游戏引擎是按照网络游戏引擎设计的, 所以游戏引擎可以
进一步的升级为一个网络游戏的引擎, 用于网络游戏客户端程序的开发。如果对引擎的底层图形系统进行优
化, 可以将引擎升级为215D 的引擎。本文限于篇幅部分环节省略, 部分程序代码没有给出。

使用C# HslCommunication库实现三菱PLC通信(含完整代码示例) 在工业自动化开发中,上位机与PLC的通信是关键环节。HslCommunication库是一个开源的.NET工业通信库,支持三菱、西门子、欧姆龙等多个品牌PLC的通信协议。本文将演示如何通过库实现C#程序与三菱PLC的通信,并提供完整的代码示例。 阅读详情

相关推荐

【论文+代码】ZS-N2N实现小样本零网络图像去噪

本文涵盖论文原文讲解与代码复现。

weixin_46287760的博客 4002

游戏开发技术解析:从零到一掌握游戏开发的全过程

游戏美术是游戏开发中不可或缺的一环,它涵盖了游戏的视觉设计,包括角色设计、环境设计、UI/UX设计等。美术作品不仅为游戏增色添彩,更是玩家沉浸感的重要组成部分。1.1. 角色设计角色设计是游戏美术中的重要部分,它包括角色的外观设计、动作设计、表情设计等。角色设计需要考虑角色的背景故事、性格特点以及与游戏世界的互动方式。1.2. 环境设计环境设计是游戏美术的另一重要部分,它包括游戏世界的地形、建筑、植被等设计。环境设计需要考虑游戏世界的风格、氛围以及与角色的互动方式。

极客代码 1万+

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

游戏开发引擎(Pygame)核心方法

Pygame是Python最经典的2D游戏开发第三方库,机巧围棋基于Pygame游戏开发引擎实现围棋游戏运行和交互逻辑,并搭建围棋游戏可视化界面。 本文不是Pygame的API文档或教程,但是本文将介绍在机巧围棋中所涉及的Pygame游戏开发引擎相关知识和方法,并详细讲解机巧围棋中基于Pygame实现的按钮控件、信息滚动显示器、音乐播放器等。 1. Pygame基本知识 1.1 Pygame游戏开发框架 Pygame游戏开发框架共包含4个部分: 第一部分:引入pygame和sys; 第二部分:初始化pyg

RuizhiHe 9923

【Arc GIS 零基础教学】土地利用类型图的绘制方法

​Hi,我是胡学长!今天教大家怎么利用Arc GIS 绘制土地利用类型图。土地利用类型图是表达土地资源的利用现状、地域差异和分类的专题地图。它是研究土地利用的重要工具和基础资料,同时也是土地利用调查研究的主要成果之一。在编制土地利用图的基础上,对当前利用的合理程度和存在的问题、进一步利用的潜力、合理利用的方向和途径,进行综合分析和评价。因此,土地利用图是调整土地利用结构,因地制宜进行农业、工矿业和交通布局、城镇建设、区域规划、国土整治、农业区划等的一项重要科学依据。......

一起来交流学习吧 1万+

Android应用之【巧妙隐藏桌面图标的进阶方案】

本文详细探讨了Android应用中隐藏桌面图标的进阶方案,解决了传统方法在Android 10及以上版本中出现的黑色图标残留问题。通过Intent-Filter配置和厂商适配技巧,实现子应用真正隐身,同时确保主应用正常启动。适用于企业工具套件、模块化系统等场景,提升用户体验和安全性。

weixin_28363123的博客 512

绪论-游戏引擎开发

绪论

weixin_45750442的博客 2050

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7687

游戏引擎以及游戏开发

游戏程序开发是 “技术实现者” 的角色,既要将抽象的创意转化为具体的交互逻辑,又要解决性能、稳定性、兼容性等实际问题。从独立游戏的单人开发(兼顾客户端与简单服务器)到 3A 大作的百人团队(细分渲染、物理、网络等专项程序员),核心都是通过代码让游戏 “好玩、稳定、流畅”。随着技术发展(如 AI 生成代码、实时云渲染),游戏程序开发的工具在进化,但对 “技术与体验平衡” 的追求始终是核心。

KARRAS的博客 2414

AI Agent Harness Engineering 的“热插拔”能力:模块化设计思路

本文我会结合我在大厂做AI Agent平台的实战经验,从核心概念、架构设计、代码实现、落地实战多个维度,给大家详细讲解AI Agent Harness Engineering的核心能力——热插拔的模块化设计思路。我们会从问题根源出发,一步步搭建一个完整的支持热插拔的Agent Harness框架,包含组件抽象、注册中心、生命周期管理、配置驱动、容错机制等核心模块。

AI天才研究院 503

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

浅析Lua中table的遍历

转载 浅析Lua中table的遍历 http://rangercyh.blog.51cto.com/1444712/1032925 lua面向对象编程之点号与冒号的差异详细比较 http://www.cnblogs.com/youxilua/archive/2011/07/28/2119059.html lua中的面向对象模拟,类,继承,多态 http://bl...

gukeming888的博客 272

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 663

java游戏开发杂谈 - 游戏编程浅析

每个游戏,你所看到的它的一切,都是计算机画出来的! 地图是画出来,人物是画出来的,树木建筑是画出来的,菜单按钮是画出来的,滚动的文字、闪烁的图标、云雾烟火,都是画出来的。 游戏编程,所要做的,就是控制程序,在什么时间,界面上画出什么东西! 大多数游戏,需要不断的重新绘制,以达到动态的效果。比如植物大战僵尸中的向日葵,它一直在动。 这类游戏,是隔很小一段时间,就会重绘。不断的重绘,每次绘制不同...

weixin_30496751的博客 141

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

cocos2d-x动作系统浅析

尊重作者劳动,转载时请标明文章出处。作者:Bugs Bunny地址:http://www.cnblogs.com/cocos2d-x/archive/2012/03/13/2393898.html 在上一篇博文中我们对cocos2d-x的动作使用有了初步了解。今天,我们将通过阅读部分cocos2d-x源码来了解这个动作系统是如何运作的,以及在使用时还有什么细节需要特别注意。 小弟初学cocos...

weixin_30421525的博客 218

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

浅析三大HTML5平台的特点

2014年,在微信平台的帮助下,HTML5社交小游戏获得爆炸式传播,同期为HTML5平台以提供制作工具服务进入市场的起点。到此为止,越来越多公司在HTML5品牌推广上进行布局。 国内HTML5平台以提供制作和开发工具为主,从平台性质而言,HTML5平台可分为轻营销模板类、功能引擎类和基...

chunpairen5090的博客 145

cocos2d-x学习心得

欢迎转载:http://blog.youkuaiyun.com/fylz1125/article/details/8487390 学cocos2d-x一段时间了,感觉没什么条理。没有项目做,学起来感觉效果不好。看了源码的一些代码,研究了test的代码,也找了一些文章来看,但总感觉还是差点什么。 个人认为学东西还是做做项目比较有感觉。比如cocos2d-x,看的再多,研究的再多,老是写写demo不动

大掌教的Cocos Creator研究院 9025

Cocos学习

cocos2dx基础篇(基础模块 2.x) (1) Cocos2D-X项目创建 (2) 第一个程序 (3) 常用重要类 (4) 标签CCLabel (5) 按钮 (6) 定时器schedule/update (7) 触碰事件 (8) 开关按钮CCControlSwitch (9) 滑块控件CCControlSlider (10) 按钮...

diaosong8043的博客 128

D2 日报 2019年5月7日

weixin_33774615的博客 230

漫画:什么是中台?

本文转载自公众号程序员小灰没有中台的时代在传统IT企业,项目的物理结构是什么样的呢?无论项目内部的如何复杂,都可分为“前台”和“后台”这两部分。什么是前台?首先,这里所说...

欢迎关注公众号:【码农突围】,公号后台回复9999,可以获取一份500页的LeetCode刷题笔记。 313

资源:创建 加载 存储 使用 ---- 热更新

Unity资源热更之AssetBundle(1)———基本介绍 http://blog.youkuaiyun.com/y1196645376/article/details/52556938 http://blog.youkuaiyun.com/y1196645376/article/details/52567171 http://blog.youkuaiyun.com/y1196645376/article/detai...

weixin_30496431的博客 104

如何从零开始用 C++ 开发一款游戏引擎?

游戏开发一直很能激励学生学习高级计算机科学。可能有些人认为游戏是孩子们喜欢的,但对于标准的计算机科学课程来说,游戏开发其实是少数几个能利用当中所有知识的领域。游戏开发涉及标准计算机科学课程中的诸多内容根据游戏的性质,你可能还需要深入到更具体的专业,比如分布式系统或人机交互。游戏开发是一项严肃的工作,是助力计算机科学理念学习的有力工具。本文将详细介绍使用C++创建一款简单游戏引擎所

致力于C语言C++知识分享! 8409

游戏引擎全面解析:从概念到应用,解锁游戏开发的秘密

游戏引擎是一套软件框架,它集成了多种技术,使得游戏开发者能够高效地创建和运行视频游戏。它通常包括图形渲染、物理模拟、音效处理、人工智能、网络通信等模块,为游戏提供了必要的技术支持。游戏引擎的重要性在于它能够简化开发流程,提高开发效率,降低技术门槛,使得开发者能够将更多的精力投入到游戏内容的设计和创新上。在本文的第一部分中,我们全面回顾了游戏引擎的概念、发展历史、核心技术和应用领域。游戏引擎作为游戏开发的基础设施,其重要性不言而喻。

极客代码 3582

Unity引擎:创造无限可能的游戏开发平台

Unity引擎通过其跨平台支持、可视化编辑器、强大的工具和资源,以及活跃的社区和成功的应用案例,成为游戏开发领域中最受欢迎和有影响力的引擎之一。它为开发者提供了一个创造无限可能的平台,让他们能够实现自己的游戏创意并与全球玩家分享。

特立独行的博客 7501

游戏引擎制作教程(三):开发环境搭建

游戏引擎开发环境搭建指南:从硬件配置到跨平台部署 本文系统阐述了游戏引擎开发环境的专业搭建方案。硬件方面推荐8核CPU/64GB内存/NVMeSSD配置,并分析Windows/macOS/Linux系统的适用场景。工具链配置涵盖VisualStudio/Clang编译器、Perforce/Git版本控制及RenderDoc等调试工具。针对跨平台开发,详细说明控制台、移动端的SDK集成策略,提出模块化工程结构设计与CMake跨平台编译方案。通过HelloEngine示例验证环境有效性,并给出编译优化、链接错误

分享知识,拥抱变化 1725

C++ 游戏编程:最新引擎使用指南

在现代 C++ 游戏开发中,不同的游戏引擎为开发者提供了广泛的工具和扩展能力。无论是 Unreal Engine 的高度定制化,还是 CryEngine 的极致视觉效果,抑或 Godot 和 Unity 的轻量与自由,C++ 都为开发者提供了强大的性能和灵活性保障。未来,随着云游戏、AI 和 VR/AR 的快速发展,C++ 作为游戏开发中的核心编程语言,将继续引领游戏引擎的发展潮流。

好看资源网的博客 4434
上一篇: 今天的被子照样不叠的飞鸽传书
下一篇: 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值