C++
_Bruce
在其职,谋其政,尽其责
展开
-
静态库动态库的使用
首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提原创 2020-08-22 18:57:42 · 210 阅读 · 0 评论 -
std::function、std::bind、函数指针的使用
先说函数指针:函数指针区别于指针函数,指针函数,就是一个普通的函数,只是返回值是指针;函数指针,我们可以把一个函数的地址通过指针来存放,这个指针就是函数指针变量,简称函数指针。int * func(int a,int b) //指针函数,定义了一个具有两个int型参数的函数,返回值是int型的指针。int(*func)(int a,int b) //函数指针,定义了一个指...原创 2020-05-04 22:01:01 · 3835 阅读 · 1 评论 -
c++定义宏#跟##的作用
1. ##的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号1 #define WARN_IF(EXP) /2 do{ if (EXP) /3 fprintf(stderr, "Warning: " #EXP "/n"); } /4 while(0)那么实际使用中会出现...原创 2020-05-03 21:50:39 · 216 阅读 · 0 评论 -
c++ copy 报错
在使用C++中中的函数copy时,编译器报了这样的错误在vs的编译器中编译器提示的是警告,而在vs2013中直接报错。最后得知原因是:copy函数原型:copy(char*s,size_tlen,size_tpos=0);而copy函数中的参数size_tpos的使用很容易导致数组越界,因此编译器会报错。解决方案:(1)选中你所建的项目,右键属性–> c/c++ --&...原创 2020-04-29 17:07:09 · 561 阅读 · 0 评论 -
cocos2d 热更新的实现
热更新的中心思想就是一个资源路径优先级的问题,将热更新的资源下载下来,在游戏中优先加载热更新下载的资源已达到热更新的目的,lua虚拟机的重启,文件的重新requireC++版:UpDataLayey.h#ifndef __HOTUPDATER_H__#define __HOTUPDATER_H__#include "cocos2d.h"USING_NS_CC;#includ...原创 2019-09-18 23:17:56 · 471 阅读 · 0 评论 -
c++内存字节对齐
内存字节对齐对齐的三个原则如何内存对齐?sizeof的结果怎么来的?请记住以下3条原则:(在没有#pragma pack宏的情况下)原则1:结构(struct)或联合(union)的数据成员,存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如:假设一个数据成员为int,int在32位机上为4字节,则要从4的整数倍地址开始存储)...转载 2019-01-18 21:22:56 · 173 阅读 · 0 评论 -
STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再...原创 2018-11-09 17:13:26 · 191 阅读 · 0 评论 -
C++中虚函数功能的实现机制
C++中虚函数功能的实现机制要理解C++中虚函数是如何工作的,需要回答四个问题。1、 什么是虚函数。虚函数由于必须是在类中声明的函数,因此又称为虚方法。所有以virtual修饰符开始的成员函数都成为虚方法。此时注意是virtual修饰的成员函数不是virtual修饰的成员函数名。例如:基类中定义: virtual v...原创 2018-11-09 16:42:47 · 193 阅读 · 0 评论 -
栈,堆,全局,文字常量,代码区总结
在C\C++中,通常可以把内存理解为4个分区:栈、堆、全局/静态存储区和常量存储区。下面我们分别简单地介绍一下各自的特点。一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其运行...转载 2018-09-08 17:31:59 · 583 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
如何实现Map的按Value排序呢? 第一反应是利用STL中提供的sort算法实现,这个想法是好的,不幸的是,sort算法有个限制,利用sort算法只能对序列容器进行排序,就是线性的(如vector,list,deque)。map是一个集合容器,它里面存储的元素是pair,但是它不是线性存储的(像红黑树),所以利用sort不能直接和map结合进行排序。因而可以采用一些其它的思原创 2017-08-28 15:56:21 · 365 阅读 · 0 评论 -
cocos2d创建不规则按钮
在游戏中,有时候会遇到不规则的按钮,比如:三国类的地图上的按钮,根据国家的的大小,划分成不同大小的不规则按钮,我们知道,素材都是规则的矩形,只不过有些圆形,不规则等图形中,在Image中处理时的数据为0而已。具体的像素问题不是很了解,好了,直接上代码。IrregularButton.h#ifndef __IRREGULAR_BUTTON_H__#define __IRREGULA原创 2017-07-16 21:26:23 · 1027 阅读 · 1 评论 -
cocos2d读取plist文件
plist文件如下:arrHello10namecjsvoid myTestreadPlist(){ FileUtils *fu = FileUtils::getInstance(); ValueMap vm = fu->getValueMapFromFile("data.plist"); ValueVector vv = vm["a原创 2017-07-11 01:03:24 · 673 阅读 · 0 评论 -
cocos2d读取xml文件
xml文件如下: #include //#include #include void myTest(){ auto doc = new tinyxml2::XMLDocument(); doc->Parse(FileUtils::getInstance()->getStringFromFile("data.xml").c_str(原创 2017-07-11 00:23:42 · 1088 阅读 · 0 评论 -
背景移动视差效果
我们在游戏中有时会遇到 两层背景的情况,要离我们远的背景移动比较慢,近的比较快,如果不想自己写写两层背景,我们可以利用引擎自带的视差节点来做 auto sprite3 = Sprite::create("HelloWorld.png"); sprite3->setAnchorPoint(Point(0, 0)); auto sprite4 = Sprite::create("HelloW原创 2017-05-01 15:57:50 · 991 阅读 · 0 评论 -
clippingNode 新手引导
试用于 游戏中的新手引导跟 弹幕滚动//clippingNode auto label = LabelTTF::create("hello World nice to meet you", "", 30); //设置要滚动的弹幕 label->setTag(100); label->setPosition(Vec2(origin.x +250,origin.y+100)); a原创 2017-05-01 14:44:40 · 281 阅读 · 0 评论 -
c++与lua的交互
在lua API中,调用一个函数的步骤很简单:1.压入你要调用的函数,使用lua_getglobal。2.压入调用参数。3.使用lua_pcall4.从栈中弹出结果。 举例说明,假设你有这么一个lua函数:function f (x, y) return (x^2 * math.sin(y))/(1 - x)end 那么,我们就可以定义个c函数来封装这个原创 2016-10-22 14:34:57 · 229 阅读 · 0 评论 -
vector,list,deque
stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。list就是数据结原创 2016-10-22 14:34:40 · 164 阅读 · 0 评论