- 博客(91)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注

原创 2D游戏开发 - SkyGameEngine2d 游戏引擎相关文章目录汇总
SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎项目地址 https://gitee.com/xfcode/SkyGameEngine2dQQ群号:498358732加群链接:https://jq.qq.com/?_wv=1027&k=5odSA9K示例游戏视频连接:https://www.bilibili.com/video/av5...
2019-07-19 17:51:17
1751
原创 UE4控制台命令使用
UE4 对自定义内置的控制台命令提供了多种支持,如下图进行简单的汇总。控制台变量和控制台命令应该尽早的注册给引擎(最好是全局变量),这样引擎才能提供控制台输入自动提示的功能,以及帮助文本的显示Exec 接口是不提供自动提示和帮助文本的支持UObject 的 exec 标记支持自动提示 但是没有帮助文本
2021-06-27 22:00:03
8740
1
原创 Lua 包管理 - Luarocks 使用指南
Lua 包管理 - Luarocks 使用指南一、luarocks 介绍二、使用luarocks安装第三方库本文主要基于 windows 平台进行讲解,Linux 下的操作类似(并且相关的文章很多)将存放解压后文件的目录添加到环境变量 Path 中, 方便直接在命令行使用 luarocks设置好后 重启计算机,使环境变量生效4. 配置luarocks,指定lua环境目录作者的lua环境目录是:E:\Lua\lua53X64后面均以这个为例luarocks config lua_d...
2020-12-08 22:33:33
16904
3
原创 windows 内存管理总结
内存管理总结前言一、内存体系结构1. 虚拟地址空间1.1 概述1.2 虚拟地址空间的分区2. 虚拟内存2.1 物理存储器2.2 页面保护属性2.3 写时复制二、操控使用内存1. 虚拟内存2. 内存文件映射3. 堆4. C/C++运行时的内存管理前言关于windows内存管理 官方文档文件映像被分为多个段,比如 .text .data .bss等。每个段其实都有自己的属性:可读、可写、可执行、可共享。一个进程是恶意进程,修改了DLL库的代码段,那么会影响其他加载了该库的进程
2020-10-18 14:16:52
3397
原创 UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析
官方demo ActionRpg 技能释放分析整体流程如何触发技能伤害ActionRpg https://docs.unrealengine.com/zh-CN/Resources/SampleGames/ARPG/index.html整体流程分析主角技能释放的入口肯定是输入引发的,所以查看 BP_PlayerCharacter 中的输入处理,我们重点考察玩家普通攻击接下来 会通过UAbilitySystemComponent激活玩家对应的技能bool ARPGCharacterB
2020-09-06 22:05:23
2185
原创 UE4 代理 使用与总结
UE4 代理 使用总结一、代理的分类与概括二、动态代理1. 常用宏2. 示例三、普通代理1. 代理的执行是否安全的分析2. 代理绑定智能指针3. 代理绑定UObject一、代理的分类与概括何为"动态"代理?作者认为"动态"主要体现在 其使用UFUNCTION的函数名绑定。即是在运行期通过反射机制动态的根据函数名查找函数,然后执行的。代理的一些 设定支持返回值支持绑定最多4个额外的变量static void MyFunc(FString str, bool b, int32 i){}
2020-06-14 23:56:11
2027
原创 2D游戏开发 - SkyGameEngine2d 纹理打包与缓存
2D游戏开发 - SkyGameEngine2d 纹理打包与缓存一、引擎纹理缓存二、纹理打包2.1 下载&&安装TexturePackerSkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎项目地址 https://gitee.com/xfcode/SkyGameEngine2dQQ群号:498358732加群链接:https://...
2019-07-28 19:39:22
682
原创 2D游戏开发 - SkyGameEngine2d 引擎架构 | 目录结构 | 引擎入口点
2D游戏开发 - SkyGameEngine2d 引擎架构 | 目录结构 | 引擎入口点一、引擎架构二、引擎目录2.1 src目录介绍三、项目目录四、引擎框架入口点分析4.1 main.cpp 分析4.2 GameAppDelegate.cpp 分析SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎项目地址 https://gitee.com/xfco...
2019-07-19 21:35:02
3999
原创 2D游戏开发 - SkyGameEngine2d坐标系
2D游戏开发 - SkyGameEngine2d坐标系一、DX11使用的坐标系二、屏幕坐标系&窗口坐标系三、SkyGameEngine2d 坐标系四、世界坐标系&局部坐标系五、锚点六、精灵在图片纹理种的位置坐标SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎项目地址 https://gitee.com/xfcode/SkyGameEng...
2019-05-28 17:25:35
5111
3
原创 2D游戏开发 - SkyGameEngine2d 创建一个游戏项目
2D游戏开发 - SkyGameEngine2d 创建一个游戏项目一、前期准备二、获取引擎工具2.1 下载工具集2.2 解压并且打开工具三、使用工具3.1 工具界面介绍3.2 设置引擎路径3.3 创建一个新项目3.4 管理创建的项目四、项目目录介绍4.1 项目文件夹介绍4.2 构建项目SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎项目地址 http...
2019-05-23 16:29:57
3717
原创 2D游戏开发 - 配置SkyGameEngine2d环境
2D游戏开发 - 配置SkyGameEngine2d环境本项目需要准备的环境下载引擎源码打开工程编译项目运行示例游戏SkyGameEngine2d - 探索 简洁 易用项目地址 https://gitee.com/xfcode/SkyGameEngine2dSkyGameEngine2d是一款对游戏开发新手友好的2d游戏引擎。引擎提供了一些2d游戏开发常用的组件,但是没有一些开源引...
2019-05-20 00:01:47
5310
原创 敏捷开发笔记 原则篇 LSP (Liskov 替换原则 )
描述子类型必须能够替换掉他的基类型遵守规则的设计从使用者的角度靠看一个模块 ,一个模块如果孤立的看,并不具有真正的有效性 。模型的有效性只能通过他的客户程序表现。IS - A 的关系是针对模块行为而言的在重新生成的派生类只能使用比原先前置条件范围更广的条件作为前置条件;只能使用比原先后置条件范围更加窄的条件作为后置条件 修正不符合LSP规则的设计用提取公共部分...
2018-08-06 19:14:45
671
原创 敏捷开发笔记 原则篇 OCP [开放 封闭] 原则
描述对于程序的扩展是开放的对于程序牵一发而动全身的更改是封闭的 实现 模块可以操作一个抽象体。由于一个模块依赖一个固定的抽象体,所以抽象体对于更改是关闭的。但是他可以通过派生来达到扩展其行为的目的。 简单的说 符合 OCP 原则的设计 是对一个模块的改动是动过新增加代码实现的,而不是修改原先的代码,不会引起连锁反应。示例假如现在需要绘制图形界面,有圆形...
2018-08-05 22:13:08
562
原创 条件变量 深入理解总结(C++ 11 中的并发库 为例)
理解条件变量条件变量可以用来管理thread间的通信。一个线程可以等待在一个条件变量上,直到发生某个事件。考虑一个场景,一个线程访问一个队列时,发现队列为空,他只能等待 直到其他线程将一个节点添加到队列中。这种情况就需要用到条件变量。(当然,用低效的轮询也可以,不停的去判断队列中是否有节点)C++11 标准库提供的 condition_variable 概览conditio...
2018-05-31 21:58:08
2896
原创 GCC扩展关键字总结
流水线优化__builtin_expect 将流水线引入cpu,让cpu可以预先取出下一条指令,提高cpu的效率。但是如果遇到跳转语句,提前取出的指令就没用了。So, GCC 提供了这个关键字 用来告诉编译器,跳转到那条分支语句的的可能性大,这样编译器就可以生成高效的汇编代码。__builtin_expect(EXP, N)// 用来指示 Exp == N 的概率...
2018-05-30 22:17:23
1654
原创 windows(vs2017) 和 ubutun 平台下 使用 protobuf 3.5.1 安装及使用 防坑指南
windows 平台 (vs2017)安装protobuf首先安装cmake CMake:https://cmake.org/download/下载protobuf的C++版本的源代码 https://github.com/google/protobuf/releases 下载 protobuf-cpp-3.5.1.zip 这个包 解压源码 (路径不要带中文)使用cmak...
2018-05-05 21:13:50
3275
2
原创 skynet 笔记 :socket 模块
接触skynet 大半年了 ,最近在研究 skynet 的源码 并且在仿写一个类似的服务程序。发现自己是在开着多个线程学习 。so 开始做一下简单的现场保护。。先大致记录一下socket模块源码文件的作用socket_epoll.c // epoll 机制 相关api 的简单封装 socket_server.c //socket 的主要实现文件skynet_socket...
2018-04-22 22:27:00
2063
原创 C/C++ 位运算 常见作用总结
按位与 &快速清零int a=0x0001;a&=0; //a : 0x0000保留指定位int a=0x0111;int b=0x0010;a=a&b; //a : 0x0010 判断奇偶 int a=2;int b=3;//与1按位与a=a&1; // a: 0 偶数值为0 ...
2018-03-14 21:51:09
6213
1
原创 ubuntu 配置 samba 共享目录
当你在Windows上安装了一台Linux的虚拟机,难免需要两台机器之间传输文件,这时就用到了 samba 服务了 。首先需要关闭防火墙 。(也可以直接配置规则 )$ sudo ufw disable //关闭防火墙 $ sudo ufw enable //开启$ sudo ufw status //查看状态 首先配置 ubuntu安...
2018-03-10 20:34:15
28258
原创 Cocos 2dx 3.x 中物理系统刚体形状总结
一、圆形 /* @ radius 圆形的半径 @ material 材质 @ offset 重心偏移 */ static PhysicsBody* createCircle(float radius, const PhysicsMaterial& material = PHYSICSBODY_MATERIAL_DEFAU...
2018-02-10 20:34:12
1996
原创 VS2017如何使用C_C++语言调用汇编函数
VS2017如何使用C_C++语言调用汇编函数1. 使用VS 创建一个新的空项目2. 新建 main.cpp 文件和 test.asm 文件3. main.cpp 文件与 test.asm 文件 main.cpp//main.cpp #include <stdio.h>#include <stdlib.h>extern "C" int test_(int a,int b,int c);in
2017-12-17 21:50:55
14344
6
翻译 动态内存(二)calloc 和 realloc && 使用动态内存
Pointers or C 英文版翻译11.3 Calloc and Realloc 另外还有两个内存分配函数,calloc 和 realloc,他们的原型如下:void * calloc(size_t num_elements,size_t element_size);void * realloc(void* ptr,size_t new_size); calloc 也是用来
2017-11-12 00:44:47
619
翻译 动态内存(一)使用动态内存
Pointers or C 英文版翻译原文:11.1 Why Use Dynamic Allocation11.1 为什么使用动态分配 当声明一个数组时,数组的大小必须作为编译期常量被给定。数组真正需要的大小是不知道的,直到运行的时候,因为空间的数量依赖与输入的数据。例如,一个计算学生成绩和平均成绩的程序可能需要储存一个班全部学生的数据,但是不同的班学生的数量不同。这些情况下,通常的方法是声
2017-11-08 17:47:56
847
翻译 何为指针(四)指针,解引用和左值
Pointers or C 英文版翻译原文:6.7 Pointers,Indirection,and L-values 6.7 指针,解引用和左值 包含指针的表达式可以用来做左值吗?如果可以的话,是那个?我们回到先前的例子。给出下面的声明:int a;int* d=&a;考虑下面的表达式: 表达式 左值 表达的位置 a yes a d yes d
2017-11-06 22:15:06
905
翻译 何为指针(三)空指针
Pointers or C 英文版翻译原文:6.6 The Null Pointer 6.6 空指针 C标准定义了一个NULL指针,其值不指向任何东西的。为了使一个指针变量为UNLL,你把0赋值给它;为了测试指针是否为NULL,你把它和0比较。选择0值是源码约定,在内部,空指针的值实际是上可能有些不同。在这种情况下,编译器负责把0翻译为内部的值。 空指针的概念是十分安全的,因为它给了你指
2017-11-05 23:10:12
661
翻译 何为指针(二)未初始化和非法的指针
Pointers or C 英文版翻译原文:6.5 Uninitialized and Illegal Pointers6.5 未初始化和非法的指针 下面这段代码举例说明了一个非常普遍的问题int *a;*a = 12; 声明了一个名为 a 的指针变量,并且把12赋值给了它指向的位置。但是,指针指向哪里呢?我们声明了这个变量,却从来没有初始化它。所以我们没法预测12被存储在哪里。在这
2017-11-04 21:46:51
1768
2
翻译 何为指针(一)认识指针
Pointers or C 英文版翻译原文:3.1.3 Pointers 指针是C语言非常流行的主要原因。指针可以高效的实现一些高级的数据结构,例如树和链表等等。例如像Pascal和 Modula-2 这些语言,虽然实现了指针,但是不允许指针的算术或者比较运算。这些语言也不允许创建已经存在对象的指针。幸运的是C程序员可以使用这些限制去编写比其他语言更加高效和简洁的程序。同时,没有限制的使用C
2017-11-01 18:43:57
610
原创 Ubuntu上安装protobuf 和protobuf-c
第一步、下载安装包 http://pan.baidu.com/s/1i43CzJn 第二部、解压 安装protobuf$ cd protobuf-2.6.1$ ./configure$ make$ make check$ sudo make install 安装protobuf-c$cd protobuf-c-1.2.1$./configure$ export LD_LIB
2017-09-26 12:17:04
6788
1
原创 一道二级C题引发的思考-- c++函数传递指针的本质 与 字符串指针与字符数组的区别
函数传递指针只可以改变指针指向的值,并不能改变指针本身!函数传递指针离不开拷贝,只不过传递指针是去拷贝指针(即地址数据),而非拷贝值。- 字符串是常量,不可更改的,在func中`*(string+1) = '\0';`先当与更改一个常量,导致奔溃 - 字符数组显然不是常量,故更改不会导致奔溃。它截取字符串的操作相当于用‘\0’截断了字符串
2017-09-22 23:41:21
434
原创 linux -> C/C++ 目录操作
创建/删除目录#include<sys/stat.h>int mkdir(const char *path_name,mode_t mode);#include<unistd.h>int rmdir(const char *path_name); rmdir要求删除的目录为空目录,当目录非空时会操作失败目录文件的打开/关闭/读取#include<dirent.h>DIR *opendir
2017-09-08 18:08:16
2416
原创 linux -> c/c++ 之文件的基本操作
打开文件/创建文件#include <fcntl.h>int open(const char * path_name,int flag); //打开现有的文件int open(const char *path_name.int flag,mode_t mode); //打开文件,如果文件不存在,则创建他 int create(const char * path_name,mode_t mod
2017-09-08 13:11:58
477
原创 设计模式之对象行为型模式 — COMMAND (命令)模式
意图 将一个请求封装成一个对象 ,从而使你可以用不同的请求对客户进行参数化。对请求进行排队或者记录请求日志,以及支持可撤销的操作。对象交互图Command 执行操作的接口client 创建具体的命令对象以及接受者Invoker 要求该命令执行的这个请求Receiver 接受者,任何类都可以作为接受者代码示例//test.h文件#include <iostream>#includ
2017-08-10 12:37:18
495
原创 设计模式之对象行为型模式 — CHAIN OF RESPONSIBILITY (职责链)模式
意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。示例代码//test.h 文件 #pragma once#include <iostream>using namespace std;typedef int Topic;const Topic NO_HELP_TOPIC = -1;clas
2017-08-09 21:17:32
424
原创 设计模式之类对象结构型 — COMPOSITE(组合)模式
目的 将对象组合成树形结构,以表示“部分-整体”的层次结构结构示例代码//test.h #ifndef _TEST_H_#define _TEST_H_#include <list>#include <iostream>using namespace std;class Component{public: const char * name(){ return m_name
2017-08-04 14:40:11
726
原创 设计模式之类对象结构型 — BRIDGE (桥接)模式
意图 将抽象部分与他的实现部分分离,使他们都可以独立的变化实现参考我的这篇文章(点这里),之前已经总结过了,就不重复了。 注意:之前仅仅是对代码依赖性的考虑,这次是在之前的基础上增加了控制不同实现的效果代码示例 注意:这是完整的示例代码 vs2013编译通过 //windows.h 文件#pragma once#include <iostream>using namespa
2017-08-02 19:16:38
443
原创 设计模式之类对象结构型 — ADAPTER (适配器)模式
概述 适配器模式可以将一个类的接口转换成客户希望的另一个类的接口效果 类适配器 一个具体的Adapter(适配器)类对Adaptee(被适配者)和Target(目标)进行匹配 Adapter可以重定义Adaptee的部分行为 不需要额外的指针以间接得到adaptee 对象适配器 允许Adapter与Adaptee及其子类一起工作。 重定
2017-08-01 13:03:37
350
原创 数据结构 - 线性表之单链表
本系列博客 以C语言为实现语言 个人总结,请持怀疑态度参考 要点总结 头插 要考虑到插入的是第一个节点的情况 链表的删除节点的动作 要考虑到链表有没有节点 按值插入 按值插入在链表中的数据是有序的时候差有意义 排序 链表的排序一般不是以数据为单位,而是以节点为单位。排序的过程可以转化为值不停的插入的过程。即把链表拆分为两个链表,一个链表中
2017-07-31 12:44:07
383
原创 C++进阶 降低文件间的编译依存关系(接口与实现解耦合)
问题背景 有时候会发现仅仅改动了某个类的一点实现(仅仅是几句代码),在编译时却发现要编译整个工程!特别是工程有点大时,编译要等很久很久。。。只为修改一个问题,时间都浪费在等待上了。为了避免这一问题,其实是可以通过巧妙的设计来避开文件间的依赖。 形成依赖的主要缘由: 头文件依赖,A类依赖B类,B类依赖C类,结果只改动C类的任何一个数据成员,A,B都得重编译。C++在编译期间,编译器需要知道
2017-07-28 18:44:56
1811
原创 QTreeWidget中添加widget 让后清除item 引发的异常
问题背景:今天在维护几个月前的代码,发现一个诡异的BUG。。问题描述:在QTreeWidget 中 的一列中 加入一个按钮 ,在更新数据时,直接调用 clear(),让后就 引发异常了。按钮是一个new出来的指针。问题解决:在clear() 调用之前 先把 按钮的指针 delete 掉 就可以解决这个问题。问题总结:在clear()时,要把通过void QTreeWidget::setItemW
2017-07-26 19:23:17
5784
原创 设计模式之对象创建型 — prototype 原型模式
本系列博客示例代码均为C++代码,个人之言,请持怀疑态度参考。如有错误,欢迎留言指正。什么是原型模式 创建一个应用需要由很多组件构成,原型模式旨在通过给工厂传递原型实例,让后工厂通过拷贝构造这些原型来组件应用。 举个例子:在abstract模式中有贪吃蛇游戏的例子。他每实现一种模式,都需要写一个snakeFactory的子类。如果用原型模式的话则不需要创建辣么多子类,通过传递不同的原型就可
2017-07-22 15:20:23
654
packTex.zip
2019-07-28
protobuf-c-1.2.1.tar.gz
2017-09-26
protobuf-2.6.1.tar.gz
2017-09-26
怎么用C++来操作mysql 数据库
2016-07-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人