《金庸群侠传》C++复刻版 kys-cpp

未知
C/C++
跨平台
2017-10-29
sb500

六一趣味技术问答,“秃头”要从娃娃抓起!>>>

kys-cpp

这是一个以SDL2为基础实现的2D游戏引擎。

基本按照当代游戏引擎的思路实现,但是没有使用回调,因为回调会增加初学者的使用难度。

同时相当于提供了一个使用该引擎制作DOS游戏《金庸群侠传》移植版的范例。

架构的简单说明

公用类

Engine封装了一套SDL2的主要实现,主要取自TinyPot。

File是一些读取,写入函数。包含几个简化程序的模板函数。

Save中对所有数据进行了封装,可以较为方便地调用。

TextureManger是一个纹理管理器,因为《金庸群侠传》的贴图是含偏移设置的,故有些特殊的地方。

Audio是音频类,基于Bass,可以播放mid,mp3,wav等。

Element

Element是游戏中的基本执行类,包含5个重要的虚函数:backRun,draw,dealEvent,onEnter,onExit。对应在背景中执行,如何画自身,如何处理事件,进入时的处理,退出时的处理。一般来说,衍生类应重写这些函数。

其中每个节点可以包含数个子节点,在绘图时子节点也会被自动一一绘出。需注意在画自身的部分不需要处理子节点,除非有特殊的需要。

存在一个全局的的Element栈root(实际是std::vector),引擎会从下到上依次画出每个Element。Element类有一个占满全屏的属性,表示这个类将占用全部的屏幕,因此引擎在绘制的时候,会仅找出最靠上的含有该属性的节点,并从这里开始往上画。

创建一个节点,并调用run过程即可运行此节点,注意使用run执行的节点是完全独占的,其子节点也会有事件响应。如果需要退出当前节点,在适当的地方使用setExit(true)即可,但是子节点调用是无效的,除非拥有当前运行节点的指针。

run过程的参数为一个布尔值,如果为true则会被加入到root并进行绘制,如果为false则只运行不参与绘制。但是很多节点的draw过程是空的,即使放到root中也不会参与绘制,实际利用了这一特性的仅有显示人物对话的部分。

run过程会返回一个函数值,可以利用进行一些判断,例如菜单的选择。

自己创建的节点通常需要自己销毁,但是要注意如果某个节点在其他节点的Child当中,则会被自动销毁,请注意这些问题。

部分节点使用了单例,这些节点请留给程序运行结束自动销毁。

请不要让子节点出现递归包含,这样会迅速消耗掉所有资源。



的码云指数为
超过 的项目
加载中

评论(3)

s
str_name_c
代码缺失,是不是有些忘上传了,编译不过,只是一部分代码,资源也没有
s
soberCoder
github 上的代码无法编译
aforbe
aforbe
好怀念,完成度咋样?有没有直接可以下载玩的exe?

暂无资讯

暂无问答

C++ STL编程轻松入门 2

1.3.3 STL和GP,GP和OOP   正如前面所提到的,在STL的背后蕴含着泛型化程序设计(GP)的思想,在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的...

2015/11/21 10:30
627
0
MFC原理第一讲.MFC的本质.以及手工编写MFC的程序

        MFC原理第一讲.MFC的本质.以及手工编写MFC的程序 PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始....

2018/09/11 16:19
52
0
C++中.cpp和.hpp的区别

原文地址:https://blog.csdn.net/qzx9059/article/details/89210571 c++中 cpp和hpp 我们可以将所有东西都放在一个.cpp文件内,编译器会将这个.cpp编译成.obj,即编译单元。一个程序可以由一...

2019/12/02 14:56
122
0
C++ STL编程轻松入门 4

 2.2.2 第二版:工业时代--组件化大生产   我们应该庆幸自己所生活的年代。工业时代,科技的发展所带来的巨大便利已经影响到了我们生活中的每个细节。如果你还在以原始人类的方式生活着,...

2015/11/21 10:32
389
0
C++ STL编程轻松入门 5

2.2.3 第三版:唯美主义的杰作   事态的发展有时候总会趋向极端,这在那些唯美主义者当中犹是如此。首先声明,我并不是一个唯美主义者,提供第二版程序的改进版,完全是为了让你更深刻的感...

2015/11/21 10:33
222
0
Xcode 中配置 clang-format 格式化 C++ 代码

<table class="d-block"> <tbody class="d-block"> <tr class="d-block"> <td class="d-block comment-body markdown-body js-comment-body rgh-linkified-code"> <p>Xcode 自带的代码格式化...

2019/04/10 10:10
43
0
C++做四则运算的MFC计算器(一)MFC界面创建

学习最有效的方法就是实战,这两篇文章写了做MFC加减乘除计算器的过程。 第一写前台MFC界面搭建,第二写后台计算原理及代码。 MFC编程参考教程:http://www.jizhuomi.com/school/c/149.html...

2019/06/03 14:51
109
0
LLVM 与 Clang 及其关系

随着 Android P 的逐步应用,越来越多的客户要求编译库时用 libc++ 来代替 libstdc++。libc++ 和 libstdc++ 这两个库有关系呢?它们两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写...

2019/01/17 11:10
563
0
VS2010-MFC(MFC应用程序框架分析)

转自:http://www.jizhuomi.com/software/145.html 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是Win...

2018/08/05 22:33
51
0
CentOS 安装 clang

Clang是一个C语言、C++、Objective-C、Objective-C++语言的轻量级编译器。源代码发布于BSD协议下。2013年4 月,Clang已经全面支持C++11标准,并开始实现C++1y特性(也就是C++14,这是C++的下一...

2018/01/28 19:49
34
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部