C++游戏编程教程(一)

article/2025/9/21 6:57:53

参考书籍:《C++游戏编程:创建3D游戏》
注:本教程所有代码的开发环境均为Visual Studio Preview 2022,C++标准是C++20。

一、初识SDL

SDL是一个跨平台的开源多媒体库,被广泛应用于游戏开发,具体可以看这里。另外,SDL的官网上也有很多资料,可以点击此处查看。
一旦出现了这样的程序库,环境配置就会成为众多初学者最头疼的事。为了一劳永逸的解决这个问题,我们先新建一个示例项目,并进行以下配置:

  1. 首先,我们要从官网上下载SDL库,下载Source Code和Runtime Binaries。下载之后,找到include和lib两个文件夹,把它们拷贝到一个固定的地方,以后就不要动它们了。

  2. 进入新建的项目。我们先不管代码,找到项目-属性-C/C+±常规,把include文件夹的路径添加到“附加包含目录”中。修改附加包含目录

  3. 接着,我们找到链接器-常规,把lib文件所在的路径添加到“附加库目录”里。修改附加库目录

  4. 然后,我们找到链接器-输入,把用到的lib添加到“附加依赖项”里。我添加了这几个(以后用到别的可以添加):

opengl32.lib
SDL2.lib
SDL2main.lib
SDL2_ttf.lib
SDL2_mixer.lib
SDL2_image.lib
  1. 因为程序需要用到很多dll,如果每次创建程序都复制一次太麻烦,所以我们可以让VS生成成功之后自动复制dll。找到属性-生成事件-生成后事件,添加以下代码到“命令行”:
xcopy "XXX\*.dll" "$(TargetDir)" /s /h /d /y
xcopy "XXX\*.dll" "$(SolutionDir)" /s /h /d /y

其中,XXX是下载的dll文件的路径。


至此,配置工作基本完成,接下来,我们要把这个示例项目保存成项目模板,方便以后使用。具体方法请看这里。

二、程序框架

在本教程中,我参考那本书,使用了面向对象的思想,面向对象的优点在这里充分体现出来了,特别是低耦合、易扩展的特性。体现在实际应用上,只要费一点功夫写几个框架类,后面的直接继承就行了,需要修改的也少之又少。
程序主要是由以下几个类组成的:

1.Game类

这是最重要的一个类,它管理整个游戏的数据加载、角色和组件的运行。这个框架写好后,基本上不怎么用修改。

2.Actor类

这个类是角色类,用来管理一个角色的状态,但只包括处理输入和更新位置,并不包括绘制。在Game类里有一个容器来存储所有的角色。

3.Component类

这个类是组件类,用来实现各种功能,每个组件都与一个Actor关联,在Actor里有一个容器来存储所有的组件。

4.DrawComponent类

这是一个特殊的组件类,专门用于绘制。它派生自Component类,但与基类不同的是,它并不存储在Actor的容器里,而是存储在Game类里一个专门的容器里。
注:上面所说的“存储”,是指指针存储在容器里,对象本身都是new出来的。


其它的与游戏相关的所有自定义类,都是直接或间接派生自这几个类的。
今天就先讲到这里,下一篇博客里我会详细介绍Game类的实现。再见:-)


http://chatgpt.dhexx.cn/article/AlYPKJHW.shtml

相关文章

html5分镜头脚本范例,分镜头脚本教程图解

这是一份pdf免费高清彩版的分镜头脚本设计教程,全书彩页,排版非常不错,阅读起来充满趣味性,另外,书中有不少分镜头脚本范例以及分镜头脚本教程图解,是一本值得一看的好书。全书详细讲解了分镜头是如何制作的…

Java开发游戏脚本(第五卷)

游戏脚本开发第五卷 前言介绍相关技术相关功能项目结构最后结语 前言介绍 本卷具体介绍脚本1.0,相关代码不再展示,该项目全部源码以及相关配置文件可在下方评论区留下QQ邮箱即可领取。 相关技术 JavaFX,主要用于展示页面效果,该技…

群控系统linux脚本,群控系统的自定脚本制作

做为沒有一切技术性累积的***游戏玩家,买这套醉适合,回家了依照使用说明一顿插线,插 好即玩,一小时内拿下,立刻就可以进行实际业务流程。这套系统软件现阶段关键对于手机0信,沒有各种各样目不暇接的作用&am…

Unity 脚本入门教程

原文:Introduction to Unity Scripting 作者:Georgi Ivanov 译者:kmyhy Unity 的许多功能都要通过它的富脚本语言 C# 来体现。你可以用它来处理用户输入,操作场景中的对象,碰撞检测,自动生成新的 GameOb…

2020年易语言调用大漠插件来制作游戏脚本教程

第一章 易语言基础 共6课时 1、关于易语言必须了解的基本知识 2、易语言基本组件(不包括超级列表框)讲解 3、易语言超级列表框详解 3、易语言核心支持库讲解之一 4、易语言核心支持库讲解之二 5、易语言模块制作和DLL制作 6、用制作的模块和DLL开发三个小…

Lua脚本教程

Lua脚本教程 一、数据类型1、常量、变量2、变量名:字母、数字、下划线(不能以数字开头)3、几种数据类型 二、运算符三、初识函数四、判断语句五、循环语句六、表七、高级函数与控制结构八、函数库1.基本库2.数学库,表库3.字符串库…

【按键精灵】一步两步脚本教程

使用版本:2014.06:19549 游戏地址:http://www.4399.com/flash/204661_2.htm 图1 4399一步两步 1 脚本前准备 一步两步在h5页面中的目标是通过点击1步/2步,避免掉下去的情况下得到高分,另外能吃到硬币有额外加分,那么…

梦幻西游打宝图脚本制作教程

第1节课-找游戏内存数据 第2节课-起号辅助开发实战 第3节课-辅助大体框架设计 第4节课-自动起号功能完善 第5节课-找各种功能的内存数据1 第6节课-点击小地图的算法分析 第7节课-点击小地图功能代码实现和完善 第8节课-背包物品遍历功能实现 第9节课-背包物品遍历功能完善 第10…

怎么制作游戏脚本_自动玩游戏,手游脚本究竟是怎么做的?

手游现在已经成为大家打发碎片化时间的一种很普遍的方式了,而有的人会由于种种愿意不能自己去玩,就希望有什么办法或者工具能帮助我们解决这个问题,不用人收着也能完成任务。 实现原理: 比如一个游戏的任务,你需要在不同的手机屏幕上进行一系列点击,滑动,甚至输入文本,…

软件开发过程与需求获取

为学堂在线清华大学《软件工程》部分视频笔记 8.1需求工程师 需求分析是软件工程中的重要步骤,是决定软件醒目成败的关键影响因素之一。因此,需求工程成为软件工程和系统工程重要的分支领域之一。在需求工程中,我们主要关注的事软件和系统需求…

软件需求分析-需求开发-需求分析与建模和需求描述

需求开发 C6需求分析与建模一、要点二、周期一:理清框架和脉络三、周期二:确定需求细节四、其他需求 C7需求描述需求描述的风格与格式 C8需求验证 C6需求分析与建模 一、要点 需求分析实际上是业务分析,也就是选择一种业务导向的线索将零散…

需求开发与需求管理

需求开发与需求管理概述 在我看来, 项目管理的日常活动包括了: 需求管理、故障管理、版本管理、任务管理。 需求管理贯穿了项目的大部分生命周期,故障管理则从第一个迭代版本出现直到产品维护阶段(包括内部故障与外部故障&#xf…

软件开发与过程管理——需求获取

目录 一. 需求获取概述 1.1 为什么要进行需求分析 1.2 需求获取的非平凡性 1.3 需求获取的主要活动 二. 需求获取的策略 2.1 需求获取的主动性策略 2.2 需求协商 三. 需求获取的主要方法 3.1 用户调查 3.2 文档分析 3.3 原型法 3.4 模型驱动 四. 软件开发及过程…

浅谈软件项目需求分析

这里不是写标准化的理论知识,而是想写写对软件需求工作的感受。 理论上的需求管理是要解决系统需求做什么的问题,以此界定系统功能和非功能性的内容。需求指的是由项目接受的或项目产生的产品和产品构件需要,包括由组织征集的对项目的…

软件工程之需求分析

现在人们越来越认识到软件工程在软件开发中的重要作用。目前国内软件在开发中还没有对软件开发的过程进行明确规定,文档不完整,也不规范,软件项目的成功往往归功于软件开发组的一些杰出个人或小组的努力。这种依赖于个别人员上的成功并不能为全组织的软件生产率和质量的提高…

如何写一份好的软件开发的需求分析

什么是需求分析? 通俗的讲,对用户的意图不断揭示和验叛的过程,要对经过系统可行性分析所确定的系统目标做更为详细的描述。 假如你是个建筑工程师,有个客户找你建一个鸡窝,这个时候要需要与客户沟通,来确定…

软件需求的三个层次——业务需求、用户需求和功能需求的区别

我们的软件产品或者项目,其需求都有三个层次,业务需求、用户需求和功能需求,除此之外,每个系统还有各种非功能需求。不是很了解的朋友,今天就和我和我们一起来了解一下吧!   下图是需求层次关系图&#…

运算符重载规则

1) 并不是所有的运算符都可以重载。能够重载的运算符包括&#xff1a; - * / % ^ & | ~ ! < > - * / % ^ & | << >> << >> ! < > && || -- , ->* -> () [] new new[] …

C++ 重载运算符

一、运算符重载 运算符重载是一种形式的C多态。 在C中&#xff0c;编译器有能力把一个由数据、对象和操作符共同组成的表达式&#xff0c;解释为对一个全局或成员函数的调用。该全局或成员函数被称为操作符函数&#xff0c;通过重定义操作符函数&#xff0c;可以实现针对自定…

C++重载决议

目录 前言一些与overload易混淆的概念override运算符重载 为什么需要重载决议&#xff1f;声明函数重载 什么是重载决议&#xff1f;什么不是函数重载&#xff1f; 重载决议之过程函数重载 && 函数模板before 重载决议more detailstype conversion(类型转换)rank&#…