自制ECS库-MyECS

0.前言

因受到entt启发,以学习为目的,我仿照entt制作了一个纯头文件ecs库,目前许多功能还在实验中。其大部分接口与逻辑与entt相同,但在底层实现上一些差别。该博客主要是对ECS的介绍,对MyECS库的介绍并附带一些对entt的一些思考之类的。最后本人水平知识有限,请大佬轻喷(doge),非常欢迎大家来交流学习。

github网址 ↓

MyEcs:  https://github.com/Flaaax/MyECS

entt:   https://github.com/skypjack/entt

阅读更多

二面放一起了

杭州一家小公司的两次面试,第一次15分钟就通过,第二次拷打了半小时

阅读更多

让SDL程序不使用控制台

本文以生化危鸡项目为例,展示如何取消掉程序运行后的出现的控制台(通常以黑框的形式出现)。
需要工具:Visual Studio 2022,SDL2。

注意:本文以SDL2作为演示。关于SDL3,参见文末SDL3部分。

阅读更多

EasyX图片处理

1.图片处理函数

1
2
3
4
5
void Resize(
IMAGE* pImg,
int width,
int height
);

参数

pImg

指定要调整尺寸的绘图设备。如果为 NULL,则表示默认绘图窗口。

width

指定绘图设备的宽度。

height

指定绘图设备的高度。

阅读更多

四叉树学习笔记

什么是四叉树,我们为什么使用它

在游戏开发的背景下,我们经常会遇到需要检测两个对象是否发生碰撞的情况。通过实现四叉树,我们可以减少需要检查碰撞的对象数量,只关注同一象限或相邻象限内的对象。

阅读更多

网络编程学习笔记-1

国庆期间,我在B站游戏开发区知名UP主Voidmatrix的指导下对如何制作联机游戏进行了初步的学习,学习了服务器程序是如何与客户程序进行沟通,初步使用了SDL_net的TCP协议,此篇文章对学习、探索过程的按照时间顺序进行回顾。

阅读更多

2D 游戏光照分析

本文将会介绍一个我正在制作的项目 PaperCraft 中有关游戏 2D 光照的实现. 提供一个低成本的基于有符号距离场可用于实时 2D 光照渲染的可行思路. 本文将会提供一种可能的 SKSL(Skia Shader Language)代码来实现该方法.

阅读更多

卡牌肉鸽开发日志01-游戏的核心玩法及预期设计

大家好啊,在暑期开始之前,一直有在群里讲过自己的计划————开发一款卡牌肉鸽游戏,在经历了漫长期末周后,现在终于正式开工了!

核心玩法

卡牌肉鸽这个门类中有许多优秀的前辈,例如杀戮尖塔、Balatro等等,其中有许多优秀的设计,例如杀戮尖塔费用、抽牌、卡牌攻防之间的关系,Balatro中小丑牌调整摆放顺序影响触发顺序,这些设计让它们具有风格各异的乐趣,提供了重复游玩的价值,我会在设计游戏时参考这些内容。
当然,一昧的模仿优秀的前辈并不能做出一款有意思的游戏,我制作的卡牌肉鸽区别于优秀前辈在于抽牌机制的设计,杀戮尖塔大概有以下几种抽牌的方式————卡牌效果、每回合开始抽牌、药水抽牌,Balatro则是有一个固定的卡牌上限每当出、弃牌时,都会抽牌直到达到上限,我的卡牌肉鸽手牌类似一条履带,有固定的卡牌上限,每此出最左处的牌时都会进行抽牌,举个例子,我出了2、3序号的牌时,不会抽牌,此时若出了序号为1的牌,便会一次性抽3张牌,基于这样的抽牌规则,卡牌效果的设计可以非常灵活,例如可以设计某张牌效果为下一次抽牌时根据抽牌数量造成高额伤害,这样便鼓励玩家做出保留大量空位的出牌策略。(灵感来源于计算机网络的滑动窗口协议)

预期设计

使用单例模式去管理游戏的内容,设计事件类,所有会改变游戏内容的玩家操作发送给事件管理器,由事件管理器进行事件的创建、更新、回收,设计对象池避免反复的创建、回收导致的性能浪费,用数据来描述逻辑,游戏内各种数值的设定通过json文件进行配置,通过随机数生成地图。

c++输入输出

学校对于这一节并没有教,当时看也只是模仿了上面的案例,不是很懂。现在在VoidMatrix的塔防教程中看到了这方面知识点相关,就想相对了解一下

1
2
3
4
5
6
7
8
std::fstream file(path);			
if (!file.good())return false;

std::stringstream str_stream;
str_stream << file.rdbuf();
file.close();

cJSON* json_root = cJSON_Parse(str_stream.str().c_str());

主要弄明白这一段代码的意思。

阅读更多