C++游戏编程教程(一)_c++游戏开发-程序员宅基地

技术标签: c++  C++游戏编程  游戏  sdl  游戏开发  

参考书籍:《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类的实现。再见:-)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_54121864/article/details/120462752

智能推荐

支付宝常用接口统一封装,可直接支付参数使用(适用于H5、PC、APP)_支付宝支付接口打包-程序员宅基地

文章浏览阅读1.7w次。支付宝常用接口统一封装,可直接支付参数使用(适用于H5、PC、APP)_支付宝支付接口打包

15、电脑实现滑动关机-程序员宅基地

文章浏览阅读327次。2、系统图片实现滑动关机:鼠标右键桌面,点击新建->快捷方式,输入:SlideToShutDown,点击下一步,快捷方式的名称可以不改,直接使用SlideToShutDown.exe,也可以改为关机,最后点击完成即可。此时,桌面会出现滑动关机的快捷方式。解:1、自定义图片实现滑动关机:(1)鼠标右键桌面,点击个性化->锁屏界面,在个性化锁屏界面选项中选择Windows聚焦、图片和幻灯片放映均可,若选择图片,可以从最近使用的图像中任选一项,也可以点击浏览照片,从本地图片中任选一项;

Java虚拟机(十五)--使用HSDB查看运行期内存分布_hsdb> scanoops 0x00000000d5f80000 0x00000000873800-程序员宅基地

文章浏览阅读1.3k次。HSDB是jvm自带的工具用来查看运行期内存中的分布状态。首先跑起来一个进程,打上端点。示例源码:public class Person { int a=5; public static void main(String[] args) { Person p=new Person(); p.test(); } public v..._hsdb> scanoops 0x00000000d5f80000 0x0000000087380000 com.bqdn.entity.son.cla

7段均衡器最佳参数_介绍一下十段均衡器的设置和参数-程序员宅基地

文章浏览阅读7.3k次。介绍一下十段均衡器的设置和参数【第一章.EQ的基本定义】EQ是Equalizer的缩写,大陆称为均衡器,港台称为等化器。作用是调整各频段信号的增益值。10段均衡器表示有10个可调节节点。节点越多,便可以调节出更精确的曲线,同时难度更大。从左到右的顺序是从低频到高频[100Hz,200Hz, 400Hz, 600Hz, 1KHz, 3KHz, 6KHz, 12KHz, 14KHz,16KHz]。【第..._均衡器最佳参数

HTML基础_html中表示标题1~标题6的写法,分别是-程序员宅基地

文章浏览阅读159次。1. 文本标题:【格式】:<h#><h#>,#为1~6,分别为6级标题2. 字体及字符实体语法说明<i></i> 或<em></em>倾斜标记<b></b> 或<strong></strong>加粗标记<u></u..._html中表示标题1~标题6的写法,分别是

关于vue配置代理(nginx)的一些学习记录_vue nginx-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏2次。假设有两台主机AB,一台服务器,其中A主机代理(代替)B主机去访问服务器。_vue nginx

随便推点

Excel常用:将文本格式的数值转换为数字等-程序员宅基地

文章浏览阅读1.1k次。Excel中将文本格式的数值转换为数字

拾起王慧文的AI梦,美团冲向“光年之外”?-程序员宅基地

文章浏览阅读177次。2020年底,王慧文在朋友圈写下这句话时,外界本以为这位伴随中国互联网发展而持续创业20年的人物即将告别创业舞台。但是,一个曾经多次创业,正值壮年的互联网老将心中的创业热情是难以熄灭的。

JSP入门-程序员宅基地

文章浏览阅读1.5k次,点赞5次,收藏8次。第一章 为什么学习Jsp1.1 现有技术不足Servlet可以通过转发或重定向跳转到某个HTML文档。但HTML文档中的内容不受Servlet的控制。比如登录失败时,跳转回登录表单页面无法显示诸如“用户名或密码不正确”的错误消息,所以我们目前采用的办法是跳转到一个错误信息页面。如果通过Servlet逐行输出响应信息则会非常繁琐。Servlet输入html页面的程序代码:package com.atguigu.servlet;import java.io.IOException;import j_jsp入门

Windows下Apache Tomcat 8安装配置_tomcat8 windows部署-程序员宅基地

文章浏览阅读685次,点赞23次,收藏11次。5:打开解压文件夹中的bin目录 【apache-tomcat-8.5.12-windows-x64】–>【bin】–> 【startup.bat】最近遇到了个问题,服务器上的项目突然访问不了,就上服务器去重启了tomcat服务,谁知道到最后tomcat的服务报错了,重新启动服务的选项。第一步:使用cmd命令进入到你的tomcat文件下的bin目录,我的tomcat在D盘。

关于有限脉冲响应滤波器_满足指标滤波器阶数是多少有限冲激响应-程序员宅基地

文章浏览阅读4k次。数字滤波器通常用于修正或者改变时域或频域中信号的特性。最为普通的数字滤波器就是线性时不变LTI滤波器。有限脉冲响应FIR滤波器是一种LTI滤波器。N阶的FIR滤波器的输出对应于输入时间序列xn的关系形式如下:hk为滤波器系数。y0 = h0*x0y1 = h0*x1 + h1*x0y2 =h0*x2 + h1*x1 + h2*x0....................................._满足指标滤波器阶数是多少有限冲激响应

使用python将excel转为lua文件_# 当前脚本路径 curpath = os.path.dirname(os.path.abspath-程序员宅基地

文章浏览阅读6.3k次,点赞10次,收藏22次。excel表格格式 脚本文件目录结构 windows bat命令,用于快速执行excel2lua.py脚本 excel2lua脚本代码import sysimport osimport xlrdimport re# 当前脚本路径curpath = os.path.dirname(os.path.abspath(sys.argv[0]))# 文件头描述格式化文本lua_file_hea_# 当前脚本路径 curpath = os.path.dirname(os.path.abspath(sys.argv[0])) # 文

推荐文章

热门文章

相关标签