自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

追求游戏之道

知其然知其所以然

  • 博客(34)
  • 收藏
  • 关注

原创 数据结构与算法(每天更新)

常用数据结构数据结构分类数据结构描述了数据元素之间的关系,通常分为集合、线性、树型、图型。集合描述了对象间没有直接的关系,线性指之间关系一对一,树型指的是一对多,图型指的多对多。数据结构常见的有表、队列、栈、树、散列、堆、图,每种数据结构都有多种表示,有的操作代码编写简单,有的编写麻烦。类如普通的二叉树的一些添加、删除操作比较简单,但是对于平衡树的这些操作,由于需要考虑平衡,导致代码编写困难。还有一

2016-07-06 00:48:32 1053

原创 opengl编程一(使用着色器)

openglopengl简介gl是一套图形编程API,是图形应用开发的工业标准接口,每个平台都有相应的实现。可视化的操作系统都提供了图形编程接口,通常这一系列的接口作为操作系统的一个系统服务,为客户提供窗口渲染。那为什么还用gl呢?系统提供的这些服务并不是针对gpu进行优化的,通常接口是为2d渲染提供服务的,3d没提供直接支持。还有各个平台的接口不一样,移植很困难。而使用opengl除了移植外,它针

2016-07-07 14:25:14 8602 1

原创 cocos2dx-CCSpriteBatchNode源码分析(VAO+VBO)

CCSpriteBatchNode简介CCSpriteBatchNode是用来一次渲染多个精灵的,这些精灵是CCSpriteBatchNode的孩子,并且使用同一个纹理,后面将详细分析CCSpriteBatchNode的孩子为什么用使用同一个纹理。多个纹理可以打包成一个纹理,然后通过精灵帧缓存载入这个纹理文件的属性文件,创建纹理与精灵帧,后面用相应的精灵帧创建精灵,这里省去了多次读取外部文件,创建多

2016-07-06 15:20:42 2192

原创 cocos2dx-CCControlButton源码分析

[TOC]CCControlButttonCCMenu简介CCControlButtton是按钮控件,有一个标签加背景图片构成,标签和背景可以只有一个存在。cocos的CCMenu以及提供了相应的空间功能,CCMenu同CCControlButtton一样派生于CCLayer,可以开启触摸。CCMenu的孩子CCMenuItem已经提供了简单的按钮功能了,可以由图片或者文字构建一个菜单项,CCMen

2016-07-04 23:17:25 2642

原创 cocos2dx-实现CCDictionary的hash库uthash详解

uthash详解CCDictionary底层用的是uthash,追踪CCDictionary的接口,查看CCDictionary是如何利用uthash的接口的,以及uthash是怎么实现的。 下面是uthash的类图: tail方便uthash快速索引所有对象,每个bucket就是一个拉链法hash表的一个链表。客户变量m_pElements指向客户所有加入uthash中的客户对象构成的链表

2016-06-30 18:16:19 3919

原创 cocos2dx-深度解析plist文件(二)(CCSpriteFrameCache怎么从解析出的数据创建精灵帧的)

cocos2dx-深度解析plist文件(二)(CCSpriteFrameCache怎么从解析出的数据创建精灵帧的)精灵帧的创建CCSpriteFrameCache::addSpriteFramesWithDictionary(CCDictionary* dictionary, CCTexture2D *pobTexture)里面的CCDICT_FOREACH(framesDict,

2016-06-29 17:31:15 2925

原创 cocos2dx-深度解析plist文件(一)(游戏对象的数据如何从plist创建获取)

cocos2dx的精灵缓存在创建一组精灵帧,加载瓦片地图,普通动画的创建、骨骼动画等等都会通过plist(parameter list)文件获得需要的信息,建立器游戏中需要的类对象。本文从CCSpriteFrameCache读取plist创建精灵帧研究起。其中代码使用到了tinyXML2第三方库,以及SAX(simple api xml)。然后在从精灵帧创建精灵反向研究,plist文件数据的含义。

2016-06-28 17:59:50 10003

原创 cocos2dx-详细剖析lua(如何与lua集成,如何导出lua api,如何与lua交互)

本文详解lua是怎么跟c/c++交互的;cocos怎么利用luac/c++交互的技术,导出lua api的供脚本使用;cocos如何进行c++与lua混合编程,cocos有哪些重要lua接口。一、lua与c/c++的交互1、lua简介lua是由c语言编写,c/c++程序可以包含lua库,利用提供的api进行lua脚本开发,lua提供了c与lua相互调用的接口。下面是lua的全部库文件:

2016-06-26 15:59:28 6971

原创 cocos2dx-内存管理剖析(智能指针的局限与引用计数的选择)

一、常用内存管理计数1、智能指针cocos的内存管理没有用智能指针,智能指针,c++有相应的类型,代码如下:#include using namespace std;class Obj{public: ~Obj(){ printf("destruct is called\n"); }};void testAutoptr(){ auto_ptr obj1(

2016-06-25 00:48:52 2640

原创 cocos2dx-精灵如何被渲染and纹理如何被管理、产生与销毁

一、精灵是怎么被渲染出来的cocos渲染用了opengl。所有精灵顶点的位置,都是真实的在opengl世界坐标系中的大小。这些点在XOY平面上,z都为0,它们进行模型视图变换,再进行投影变换,投影空间进行除法运算规格化最后通过视口变换转化为窗口上的一点。void CCDirector::setProjection(ccDirectorProjection kProjection){

2016-06-23 22:34:26 4214

原创 cocos2dx-触摸分发分析

本文分析的是cocos2dx-2.2.2的触摸分发机制。cocos利用底层的接口把消息包装发给了CCTouchDispatcher,ios平台就是用的ceglview这种视图,ios下一般应用编程我们都是用的系统提供的view,这些view可以接受触摸消息,显然ceglview也一样可以。同样也有4个触摸函数,began、moved、ended、cancled。cocos就是在里面进行了包装,

2016-06-22 18:10:06 701

原创 cocos2dx CCUserDefault

在使用CCUserDefault时发现了问题,代码如下void testUserDefault(){ CCUserDefault *ud = CCUserDefault::sharedUserDefault(); const std::string path = ud->getXMLFilePath(); printf("UserDefault path:%s\n"

2016-06-21 17:33:37 529

原创 c++集锦

dynamic_cast:dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。static_cast相当于强制转换,编译时执行,dynamic_c

2016-04-26 23:28:41 398

原创 动手实现2d游戏引擎(一)

本人准备分析cocos2dx的引擎·实现一个2d引擎名字叫gl02下面是引擎一些基本类,后面会根据需要进行修改。CCNode:引擎节点基类,它的代码如下,它的核心方法visit是渲染节点的入口,它会先处理zorder小的子节点,然后调用自身的draw方法渲染自己,在处理zorder大的节点,这样子zorder大的就会后渲染,并且可以覆盖zorder小的节点。它的主要代码有计算节点的变化矩阵

2016-04-17 23:28:10 3824

原创 socket编程(一)使用SOCK_STREAM建立可靠通信

socket是我们用来进行网络编程的基本API,一般系统都提供了socket,unix以及类unix(Linux、mac)它们都提供了socket,不过不同平台还是有那点区别的,其中Windows区别最大了。本文的代码是在mac上测试通过的。socket是一个应用层编程API,提供了tcp/ip四层模型的第三层网络层的TCP、UDP协议的数据传输方式。第二层网际层有IP协议,它本来是不可靠的协

2016-04-17 01:29:34 22941

原创 Mac快捷键

Command+C复制Command+V粘贴Command+Option+V剪切(剪切之前先复制)

2016-04-07 09:51:14 327

原创 数据结构与算法(二叉查找树)

头文件SearchTree.hpp#ifndef SearchTree_hpp#define SearchTree_hpp#include struct Node;typedef Node* SearchTree;typedef Node* Position;typedef int ElementType;struct Node{ ElementType eleme

2016-03-27 18:45:55 560

原创 cocos2dx(一)-ios平台程序怎么跑起来的

cocos2dx的在不同平台上可以运行,上层主要使用c++来写的,但是跟平台相关的东西还需要用平台的默认语言跟平台提供的api来写的。下图是AppDelegata相关类图ios中首先是main函数如下,它创建了AppController类,这是ios app的应用代理类,当app启动时,会调用这个类的- (BOOL)application:(UIApplication *)applicat

2016-03-17 15:26:05 2448

原创 objective-c感悟(四)class、catagory、class extension、optional

下面是oc的类的声明和实现,@interface看起来像是java里接口的声明,其实是oc类的声明方式,@implementation部分是类的定义。实例变量放在{}这对花或括号中,下面没有定义实例变量,花括号可以不加的。@property是属性,这里就不介绍了,前面有介绍。方法前的-号说明它是一个实例方法,如果是+号则是一个类方法。//声明@interface ARC : NSObject

2016-03-17 11:21:56 966

原创 闭包分析:lua function,oc 代码块可以产生闭包.c++lambda不能产生闭包

什么是闭包?这个问题说简单挺简单的,但是一般讲了之后跟没讲一样。就拿下面的lua代码看一下。local function getCallBack() local x = 1 return function() x = x + 1 print(x) endendlocal fun = getCallBack()fun()fun()fun()

2016-03-16 17:25:34 428

原创 objective-c感悟(三)属性之谜

@property (readwrite, assign, setter=setCity:, getter=getCity)NSString *city;@property (copy)NSString *name;@property (retain)ARC *arc;上面代码是oc的属性以及一些属性修饰符,oc跟c++区别这里挺大的,它提供了好多的操作的封装,一个@property在c+

2016-03-15 15:18:09 523

原创 objective-c感悟(二)内存管理

现在xcode里我已经找不到垃圾回收这个选项了,这里就不谈了,只谈arc(automatic reference counting).默认xcode是开启arc的,开启时,调用release retain都是错误,因为oc帮我们自动进行内存管理了,会自动在需要调用这些函数的地方进行扩展,所以我们就不要自作多情了。@implementation ARC- (void) dealloc{

2016-03-14 15:45:57 379

原创 objective-c感悟(一)oc简介与常用类型

objective-c是在c的基础上设计的一门面向对象的语言,它可以兼容c的语法,因为c的语法是它的一部分。xcode中.m文件只能使用oc,把名称改成.mm就可以进行oc与c++的混合编程了。要注意的是它们之间只能进行类跟对象的方法调用,不能直接在类的声明中声明另一个语言中类的对象,不然编译报错。cocoa是苹果的一个开发框架,包含了许多个框架在里面。fundation框架是最基本框架,可以

2016-03-14 11:43:37 492

原创 数据结构与算法一:算法复杂度分析

T(f(N)) = O(g(N)) 表示f(N)的增长率是小于g(N)的。 数学表达是f(N) n0(c、n0是个常数)T(f(N)) = θ(g(N)) 表示f(N)的增长率是等于g(N)的。 数学表达是f(N) = cg(N) N>n0(c、n0是个常数)T(f(N)) = Ω(g(N)) 表示f(N)的增长率是大于g(N)的。 数学表达是f(N) >= cg(N) N>n0(

2016-03-12 19:33:27 596

转载 C++中的new/delete运算符与operator new/operator delete函数

new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载operator new(1)只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间

2016-01-09 21:02:18 577

转载 C++类中的常量

C++类中的常量由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。   不能在类声明中初始化 c

2016-01-09 17:04:24 431

原创 shell script(一)

BRE: 运算符表达式:(优先级由高到低)[ ] : [a-z]匹配a-z中的一个字符\( \) \digit: \([a-z].*\)\3  重复子表达式[a-z].*3次* \{ \}: a\{3\} 重复a字符3次^ :^a 开头是a字符$:  a$结尾是a 字符

2016-01-04 14:11:42 479

原创 c++(一)

c++11 array类型#include #include using namespace std;void main(){array arr= {1};//for(int i=0; i!=4; i++){// cin>>arr[i];//}for(int i=0; i!=4; i++){cout}}程序输出1000

2015-12-28 22:28:30 391

原创 bash(一)

#! /bin/bash 用于写脚本告诉kernel用的是/bin/下的bash程序> 输出重定向 >>输出重定向(不会覆盖目的文件)wc -l >file2.txt   file1.txt做为输入文件,wc处理后把结果输出到file2.txt这个文件| 是管道符号可以把一个程序输出做为另一个程序输入       who | grep "lewis" 把who的输出做为grep

2015-12-20 19:34:18 531

原创 cocos2dx如何使用CCFileUtils进行文件查找的

Cocos2dx支持使用绝对路径以及相对路径进行查找文件CCFileUtils是一个抽象类,它在ios中使用CCFileUtilsIOS作为具体类。boolCCFileUtilsIOS::isFileExist(conststd::string& strFilePath)函数可以使用绝对路径以及相对路径,绝对路径调用NSFileManager的fileExistsAtPath判

2015-12-16 17:22:21 3722

原创 游戏触发器

触发器模块”就是负责控制和疏导游戏玩法以及剧情走向的重要模块。创建游戏内剧情动画、游戏中期暴兵、创建和跟踪任务目标等等游戏玩法的设计,都是通过“触发器模块”来进行的。“触发器”可以视作为一组游戏指令的最基本构成单元。无论你何时想要在游戏中产生何种事件,你都可以使用一个“触发器”来指示游戏,游戏会准确地按照你的要求产生事件。一个触发器是由以下几种元素构成:事件 即导致

2015-12-10 15:09:56 2663

原创 MoPub sdk集成

本文主要讲在cocos2dx中如何集成mopub sdk并创建 banner ad unit id,最后在项目中显示出banner ad.下载最新的mopub sdk,先登入mopub:http://www.mopub.com/,点击右上角get started,创建账号并登入。点击下面按钮,创建一个新app主要有下面两步:Step 1 - Add your a

2015-12-09 17:15:19 3647

原创 git 基本操作

git基本概念:git可以用于项目管理,我现在主要用于记录历史操作,方便回滚到以前状态。它的基本工作流程如下:working directory是工作的目录 staging area是暂存区git repository使git仓库首先为要被git管理的项目创建创库,做了修改后用git add把修改加到暂存区,最后使用git commit把在暂存区的写入reposit

2015-12-07 14:50:52 501

原创 opengl study resource

opengl-study git : git@github.com:1179432578/opengl-study.git

2015-12-03 16:56:30 313

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除