c++
genius-x
这个作者很懒,什么都没留下…
展开
-
16【cocos2d-x 源码分析】:HttpClient 的详细分析
对应源码位置:cocos2d-x-3.3\cocos\network\Http*HttpRequest的实现typedef std::function<void(HttpClient* client, HttpResponse* response)> ccHttpRequestCallback;//(cocos2d::Ref::*SEL_HttpResponse) 代表cocos...原创 2019-05-24 10:51:56 · 717 阅读 · 0 评论 -
7.【cocos2d-x 源码分析】:渲染部分的详细分析(中)
对应源码位置:cocos2d-x-3.3\cocos\render*从RenderCommand看起class CC_DLL RenderCommand{public: //以下 主要 7种 enum class Type { UNKNOWN_COMMAND,//这一种 就是不知道是哪一种 QUAD_COMMAND, CU...原创 2019-05-20 11:14:32 · 454 阅读 · 0 评论 -
3.【cocos2d-x 源码分析】:ActionManager类的详细分析
对应源码位置:(1)cocos2d-x-3.3\cocos\2d\CCActionManager (2)cocos2d-x-3.3\cocos\2d\CCAction(3)cocos2d-x-3.3\cocos\2d\CCActionInterval (4)cocos2d-x-3.3\cocos\2d\CCActionInstant先看看ActionManager 的大致原理在Director...原创 2019-05-14 17:13:25 · 356 阅读 · 0 评论 -
2.【cocos2d-x 源码分析】:Scheduler类的详细分析
对应源码位置:(1)cocos2d-x-3.3\cocos\base\Scheduler.*Scheduler 一般译作 定时器,主要用于控制触发每帧都会需要的update以及用户自定义的更新操作。Timer类的实现这是一个 Light-weight timer,提供了指定delay延迟时间后,每次经过seconds时间间隔,触发trigger时间一次,执行次数为 _repeat+1,或...原创 2019-05-14 10:11:23 · 385 阅读 · 0 评论 -
C++ type_traits实现原理
以 is_void 为例分析,源代码选择vs2017库文件#include<iostream>#include<type_traits>int main(){ std::cout << std::is_void<void>::value;// 1 std::cout << std::is_void<int>::va...原创 2019-04-24 22:23:47 · 1015 阅读 · 0 评论 -
STL标准库与泛型编程-笔记
本文主要内容为 侯捷先生 的《STL标准库与泛型编程》课程个人学习记录,并非完全照搬讲义,有机会请读者看原视频。STL结构泛型 forc++11之后,提供了泛型for,更方便的用在容器遍历。std::vector<int> v = {1,2,3};for (auto &it : v){ std::cout << it <<std::e...原创 2019-04-24 20:28:09 · 726 阅读 · 0 评论 -
C++ typename与非类型类模板参数
typename 的特殊用法C++ STL源码中有如下用法:template<class T>void foo() { typedef typename T::iterator iterator_type; // ...}这里 typename 主要作用是告诉编译器 “ 这是个类型,请放行通过!”,因为**T:原创 2019-04-24 14:28:27 · 430 阅读 · 0 评论 -
C++11给Non-static Data Member赋值
class Widget { private: int x{ 0 }; // fine, x's default value is 0 int y = 0; // also fine int z(0); // error! 这会与函数声明冲突};这里的一个背景是C++11允许了类在声明的时候直接给Non-static Data Member复值。而在C++98,你要...原创 2019-04-18 10:53:28 · 5588 阅读 · 0 评论 -
C++内存管理-笔记
本文主要内容为 侯捷先生 的《C++内存管理》课程个人学习记录,并非完全照搬讲义,有机会请读者看原视频。内存分配方式无论是哪种方式,最终使用的都是c语言底层的malloc。C++ new 关键字编译器将 new关键字翻译成 分配内存和调用其构造函数两部分。分配内存使用运算符 new,如果类本身有自定义 new运算符,则调用自定义版本,否则使用全局的 ::operator new,同理...原创 2019-04-26 16:13:53 · 347 阅读 · 0 评论 -
C++ Move与Forward实现原理
这部分可重点参考《C++ Primer 》第5版 P608-P614,写的很透彻。Forward的使用#include<iostream>#include<string>#include<vector>using namespace std;template<typename T>void print(T& t) { c...原创 2019-04-26 12:39:24 · 5162 阅读 · 4 评论 -
C++新标准C++11&14-笔记
本文主要内容为 侯捷先生 的《C++新标准C++11&14》课程个人学习记录,并非完全照搬讲义,有机会请读者看原视频。 语法部分原创 2019-04-25 22:26:09 · 1420 阅读 · 0 评论 -
8.【cocos2d-x 源码分析】:渲染部分的详细分析(下)
对应源码位置:cocos2d-x-3.3\cocos\render*从 RenderQueue说起//渲染 队列class RenderQueue {public: void push_back(RenderCommand* command); ssize_t size() const; //按照 z值进行排序 void sort(); Render...原创 2019-05-20 22:26:12 · 510 阅读 · 0 评论 -
4.【cocos2d-x 源码分析】:EventDispatcher类的详细分析
对应源码位置:(1)cocos2d-x-3.3\cocos\base\CCEvent*先从 Event 类开头class CC_DLL Event : public Ref{public: //可想而知 对应这几个类型 分别有对应的Event子类 //以及 对应事件的 eventlistener enum class Type { TOUCH, ...原创 2019-05-16 11:00:23 · 360 阅读 · 0 评论 -
5.【cocos2d-x 源码分析】:Node 类体系的详细分析
对应源码位置:(1)cocos2d-x-3.3\cocos\2d\CCNode (2)cocos2d-x-3.3\cocos\2d\CCLayer(3)cocos2d-x-3.3\cocos\2d\CCSceneNode是整个游戏对象的根节点基本后面熟知的 sprite 、 layer 以及 scene都是他的子类。Node类的部分代码由于Cocos2d-x采用继承的方针组织整个游戏对象...原创 2019-05-16 17:58:45 · 713 阅读 · 0 评论 -
15.【cocos2d-x 源码分析】:localStorage的详细分析
对应源码位置:cocos2d-x-3.3\cocos\storage\local-storage\localStoragelocalStorage 的接口cocos2d-x提供了简单的本地数据存储的功能,其主要是由对sqlite的封装来实现。//初始化 数据库void CC_DLL localStorageInit( const std::string& fullpath = ""...原创 2019-05-23 21:49:09 · 678 阅读 · 0 评论 -
14.【cocos2d-x 源码分析】:Audio的详细分析
对应源码位置:cocos2d-x-3.3\cocos\audio\include\SimpleAudioEngineSimpleAudioEngine的实现SimpleAudioEngine是提供了简单的 播放音效,以及播放背景音乐的功能。class EXPORT_DLL SimpleAudioEngine{public: static SimpleAudioEngine...原创 2019-05-23 21:31:04 · 352 阅读 · 0 评论 -
13.【cocos2d-x 源码分析】:内存管理的详细分析
对应源码位置:(1)cocos2d-x-3.3\cocos\base\CCRef ;(2)cocos2d-x-3.3\cocos\base\CCAutoreleasePool内存管理的在引擎中的位置void DisplayLinkDirector::mainLoop(){ if (_purgeDirectorInNextLoop) { _purgeDirect...原创 2019-05-23 20:30:15 · 241 阅读 · 0 评论 -
6.【cocos2d-x 源码分析】:渲染部分的详细分析(上)
对应源码位置:cocos2d-x-3.3\cocos\render\*主循环中的渲染部分下面代码选自 void Director::drawScene()if (_runningScene) { //clear draw stats _renderer->clearDrawStats(); //render th...原创 2019-05-18 20:36:14 · 339 阅读 · 0 评论 -
12.【cocos2d-x 源码分析】:UI系统的详细分析(下)
对应源码位置:cocos2d-x-3.3\cocos\ui\UI*HBox与 VBox这两者的实现很简单class CC_GUI_DLL VBox : public Layout{ public: /** * Default constructor */ VBox(); /** * Default ...原创 2019-05-22 22:19:46 · 320 阅读 · 0 评论 -
11.【cocos2d-x 源码分析】:UI系统的详细分析(中)
对应源码位置:cocos2d-x-3.3\cocos\ui\UI*Layout的原理这里选取少量的重点部分。//找当前节点的下一个可以聚焦的节点//主要看思想 已经删了很多了Widget* Layout::getNextFocusedWidget(FocusDirection direction, Widget *current){ Widget *nextWidget = ...原创 2019-05-22 21:03:23 · 397 阅读 · 0 评论 -
10.【cocos2d-x 源码分析】:UI系统的详细分析(上)
对应源码位置:cocos2d-x-3.3\cocos\ui\UI*从 Widget 看起先从 一些布局的基本讲起//这里是 代表边距的类class CC_GUI_DLL Margin{public: float left; float top; float right; float bottom; public: Margin(); ...原创 2019-05-22 21:02:19 · 516 阅读 · 0 评论 -
1.【cocos2d-x 源码分析】:引擎 mainloop 简要分析
以Win32平台为例,找到 main 函数int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCm...原创 2019-05-13 16:54:37 · 577 阅读 · 0 评论 -
9.【cocos2d-x 源码分析】:Texture的详细分析
对应源码位置:cocos2d-x-3.3\cocos\render\CCTexture*从Sprite谈起Sprite其实内部必然包含一个纹理图片,但我们写代码时候用到的是传入一个图片路径,从下面看://直接 传入Texture2D 对象Sprite* Sprite::createWithTexture(Texture2D *texture){ Sprite *sprite = ...原创 2019-05-22 10:41:39 · 1265 阅读 · 0 评论 -
17【cocos2d-x 源码分析】:多分辨率支持的详细分析
对应源码位置:cocos2d-x-3.3\cocos\platform\GLView设计分辨率与屏幕分辨率cocos2d-x中,进行游戏设计时使用逻辑上的设计分辨率,当具体游戏运行在物理机上时对应具体屏幕的分辨率,这就存在从设计分辨率到具体屏幕分辨率的适配问题,主要有一系列的适配策略,这里暂不列举,但就源码进行分析,一目了然。//这里设置 设计分辨率的大小 并指定 设计分辨率的策略voi...原创 2019-05-26 00:31:30 · 423 阅读 · 0 评论 -
字符迷阵
#include&amp;lt;vector&amp;gt;#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;using namespace std;vector&amp;lt;int&amp;gt; ves;int M, N;char **map;int times = 0;void fin原创 2019-03-08 22:14:50 · 245 阅读 · 0 评论 -
推箱子
#include<iostream>#include<queue>#include<cstdio>using namespace std;int M, N;char map[10][10];int x, y, bx, by, ex, ey;int a[] = { 0,0,1,-1 };int b[] = { 1,-1,0,0 };struct ...原创 2019-03-08 22:09:33 · 149 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。代码#include<algorithm>using namespace std;class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2)...原创 2018-09-26 09:51:10 · 199 阅读 · 0 评论 -
平衡二叉树
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。代码class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { return Judge(pRoot)==-1?false:true; } //当子树是平衡二叉树时返回深度否则返回-1 //若专门在每个节点求深度...原创 2018-09-25 22:03:41 · 118 阅读 · 0 评论 -
二叉树的深度
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NU...原创 2018-09-25 21:39:13 · 160 阅读 · 0 评论 -
C++自定义日志,断言调试工具
1.自定义Log函数//自动换行版本void Logn(const char* format,...);//非自动换行版本void Log(const char* format,...);//自动换行版本//使用举例{ Log("%s%d%s","sfnilkf",1,"fsdf"); }void Logn(const char* format,...原创 2018-07-24 19:34:05 · 513 阅读 · 0 评论 -
《C++编程思想》读书笔记
0.前言说是对本科期间来个总结,不如乘着暑假不忙看两本书,先看着本 1.正文第1卷 标准C++导引第一章 对象导论[37](2018.7.2)这一章主要介绍面向对象思想和项目管理经验(暂时没有感性认识)...原创 2018-07-03 10:06:55 · 1198 阅读 · 0 评论 -
基于EasyX的游戏引擎的设计与实现
0.前言毕业设计想做点有意思的东西,想来想去做点游戏相关的吧,毕竟以后的方向不是这个了,做点东西对这几年学习游戏开发的方面收个尾。也没想到做个什么游戏好,无意间看到EasyX这个C++图形库(安装使用参照),又联想到当时看到的《游戏引擎架构》一书,就打算仿照着cocos2d-x源码的形式写一个简单的2d引擎,姑且叫Genius引擎。1.效果先来看看效果吧,毕竟单纯的引擎也没效果,然后就...原创 2018-06-05 01:07:27 · 2900 阅读 · 2 评论 -
vector iterator not incrementable(不明显的错误)
使用vector中报出这样的错误,网上查说是迭代器删除的问题,一直没找到原因,后来终于想明白了。做个笔记,希望给遇到同样问题的读者留个参考。1.出问题代码是这个样子的for (auto iter = MouseListeners.v.begin(); iter != MouseListeners.v.end();++ iter){ (*iter)-...原创 2018-04-24 22:09:04 · 1632 阅读 · 0 评论 -
C++实现函数回调
1.关于C++实现函数回调有大体两种思路1.1.首先模仿java接口,定义一个纯虚类,让当前类继承该类,从而重写该方法,但是局限在于函数名称固定,无法应对用户自定义函数; 1.2使用函数指针,但是有所不同的是对于成员函数的函数指针显然没那么简单,需要同时保存函数指针,可当前对象指针才能实现,具体不多说,可参考以下: cocos2d-x 回调函数详解2.由此受到启发,可以将成员函数指...原创 2018-04-23 15:53:07 · 645 阅读 · 0 评论 -
EasyX的安装与使用
考研结束了好几天,开始写一些东西吧,把以前做的东西做些梳理。1.EasyX是一个轻量级的简单的C++图形库,可以用来做些简单的演示2d类游戏,没有cocos2d-x那样重量级,学习起来也比较简单,相关API很少;其次关于图形界面与QT,MFC相差甚远,但与此同时又有部分可以操作图像的基础函数,总而言之,他的优点不在完善,而在于简洁小巧 —》这是官网2.关于安装也是超级简单,首先以最新版为原创 2017-12-28 00:20:36 · 48457 阅读 · 10 评论 -
cocos2d-x游戏摇杆开发
1.最近想做一个横屏格斗类游戏,但当然第一步必不可少的就是开发一个摇杆来控制游戏人物的移动,本来打算在网上找个简单看看,没想到都好几个文件,很麻烦,而且版本太旧了,索性自己动手算了。看看效果图 //没什么人物素材,瞎找的2.其实总结一下,开发个摇杆原理并不复杂,大概思路就是这样:随便继承自node,sprite,layer都行,两个sprite,一张是摇杆背景,一个是可以移动的部分,然后注册个触摸原创 2016-12-12 00:55:58 · 3600 阅读 · 0 评论 -
二叉树的下一个结点
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。代码/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNod...原创 2018-09-26 23:03:13 · 118 阅读 · 0 评论 -
对称的二叉树
题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left...原创 2018-09-26 23:30:52 · 86 阅读 · 0 评论 -
二叉树的镜像
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public:...原创 2018-09-29 09:51:56 · 122 阅读 · 0 评论 -
动态链接库的引入库
动态库引入库:在使用动态库的时候,往往提供两个文件:1.引入库(.lib)和.dll。引入库包含被Dll导出的函数和变量的符号名,Dll包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,Dll中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载Dll,访问Dll中导出的函数。具体可参考静态链接库、动态链接库使用方法...原创 2019-01-24 10:54:18 · 750 阅读 · 0 评论