自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

专注,努力,勤奋

专注,努力,勤奋

  • 博客(302)
  • 资源 (3)
  • 收藏
  • 关注

原创 lua中如何去访问table中函数

看例子代码:do table_ = { a = 1, foo = function(i) return i end } print(table_.foo(1))end

2014-03-03 21:56:45 2651

原创 lua中的递归函数

先看例子吧:function foo(i) --1 print("i: ", i) return ienddo--local foo; --2 local foo = function (i) --3 if i < 1 then return 1 else return i * foo(i - 1) --4 end end local a = foo(4)

2014-03-03 21:34:47 9041

原创 C++内存泄露,查询检查机制

C++程序的复杂性很大一部分在于他的内存管理,没有C#那样的垃圾回收机制,内存管理对初学者来说很困难。经常会出现内存泄露的情况。那么我们写程序如何避免内存泄露呢?首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复。 本文描述了如何检测内存泄露。最主要的是纯C,C++的程序如何检测内存泄露。 现在有很多专业的检测工具,比如比较有名的BoundsChec

2014-02-28 22:30:19 1072

原创 lua之函数

在lua中,函数是一种“第一类值”,它们具有特定的词法域第一类值:表示在lua中,函数与其他传统类型的值(数字和字符串)具有相同的权利,函数可以存储到变量中(无论全局变量还是局部变量)或者是table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值。词法域:是指一个函数可以嵌套在另一个函数中。内部的函数可以访问外部函数中的变量。看例子代码:do function fo

2014-02-27 23:19:28 728

原创 lua之基本函数

在大多数Lua语法分析中可以获得这些标准Lua函数. 无可争辩, 我们可以查阅Lua网站, 但是一些少了的函数被Blizzard进行了调整. 下面列出了所有Lua函数. WoW API中的Lua注意在WoWAPI没有提供所有标准的Lua函数, 很显然, 操作系统以及文件I/O库是不支持的 Lua函数这些函数都是Lua编程语言的一部分, 点击这里了解更多. •assert

2014-02-27 00:43:18 4653

原创 lua 之如何便利数组和table

方法一,可以用for来遍历:do table_week = { "w", "e", "r", "t", "y", "u", "i", } for i = 1, #table_week do print(table_week[i]) endend#后面接一个数组或者tabe来遍历它,i是该table或者数组的起始下标。方法2:do table_week

2014-02-25 01:00:49 17847 2

原创 C++ 虚函数表解析

前言 C++关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 了解的人都应该知道虚函数(Virtual Function。在这个表中,主是要一个类的虚

2014-02-22 11:52:11 682

原创 C/C++产生[m, n)之间不重复的随机序

/**Rand a Sequence*Author:p.j.gan*Date:2014/2/22*Complier:vs2010*//**Param:*iMax: the rande data*iLen: the length of the Buffer*pSequenceBuffer: Buffer*/void randSequence(int iMax, int i

2014-02-22 11:16:59 1327

原创 C++之继承设计的障碍

1,非虚成员函数继承性的一个最常见的障碍就是继承的基类含有一个废墟成员数。假如基类中含有某个非虚函数,那么这个函数将不会再派生类被重写,为了避免这个问题,我们可以考虑把所有基类的成员函数都声明为虚函数,然而,这样的做法却会降低程序的效率。因此,我们更愿意只把哪些派生类需要重定义的函数声明为虚函数即可。2,过度保护。继承的另一个障碍就是对类成员的过度保护。为了使基类具有很好的继承

2014-02-20 00:45:03 695

原创 lua之table学习

够着是用于创建和初始化table的表达式,这是lua特有的一种表达,并且也是lua种最有用的,最通用的机制之一。它也有点类似有C/C++中enum,可以定义常量。 我们先看下例子吧:_type = { red_color = "red", bule_color = "red", white_color = "red", {x = 1, y = 2}, {x = 3, y = 4}

2014-02-19 23:12:49 1031

原创 lua之数据类型

两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。

2014-02-18 16:23:13 3701

原创 C/C++类设计--扩展和继承

继承是C++程序库用来提供扩展性的主要机制。有时,从一个类实现继承是容易的;但某些时候,从一个类继承确实很难实现的。类派生的困难程度取决于派生类本身与基类的设计与实现。对于一个类而言,如果可以容易地从它派生出适当的派生类,我们就称这个是可以继承的,之所以说是适当的派生类,因为没有人会这样认为:由于不能从类Military_vehicle(军用交通工具)派生出类Washing_machine(洗衣机

2014-02-14 14:18:30 2740

原创 C/C++类的设计---抽象性

抽象性: 每个C++类----不论可重用与否,都应该表示某种抽象,当设计一个类的时候,我们要做的第一件事情就是定义类所要表示的抽象。一旦定义了类要表述的抽象,我们就可以有代表性地用某种方法来实现这个抽象。将类的抽象从它的实现分开是很有裨益的:第一:简化了类的抽象,当对类进行抽象的时候,我们会忽略对当前设计目的的不重要细节,譬如对Car驾驶者而言,注入车的划痕数量、是否具有小的后背仓等细

2014-02-14 09:50:43 1859

原创 cocos2dx之获取当前的输入法语言

它是直接利用CCApplication中的getCurrentLanguage获得当前输入法,直接看例子吧: ccLanguageType currentLanguageType = CCApplication::sharedApplication()->getCurrentLanguage();提供了如下语言:typedef enum LanguageType{ kLang

2014-02-13 23:17:04 2022

原创 cocos2dxz之CCAnimationCache

通常情况下,对于一个精灵动画,每次创建时都需要加载精灵帧,按顺序添加到数组,再创建对应动作类,这是一个非常烦琐的计算过程。对于使用频率高的动画,比如鱼的游动,将其加入缓存可以有效降低每次创建的巨大消耗。由于这个类的目的和缓存内容都非常简单直接,所以其接口也是最简单明了的,如下所示: /** Retruns ths shared instance of the Animation

2014-02-12 16:00:35 3434

原创 cocos2dx之CCSpriteFrameCache

顾名思义,这里缓存的是精灵框帧CCSpriteFrame,它主要服务于多张碎图合并出来的纹理图片。这种纹理在一张大图中包含了多张小图,直接通过CCTextureCache引用会有诸多不便,因而衍生出来精灵框帧的处理方式,即把截取好的纹理信息保存在一个精灵框帧内,精灵通过切换不同的框帧来显示出不同的图案。CCSpriteFrameCache的常用接口和CCTextureCache类似,不

2014-02-12 15:56:04 3998

原创 cocos2dx之CCTextureCache

首先是最底层也最有效的纹理缓存CCTextureCache,这里缓存的是加载到内存中的纹理资源,也就是图片资源。其原理是对加入缓存的纹理资源进行一次引用,使其引用计数加一,保持不被清除,而Cocos2d-x的渲染机制是可以重复使用同一份纹理在不同的场合进行绘制,从而达到重复使用,降低内存和GPU运算资源的开销的目的。常用的是如下所示的3个接口: /** Retruns ths share

2014-02-12 15:51:29 7392 3

原创 cocos2dx之保存截屏图片

我们要保存当前的运行的scene的截图的话,我用到CCRenderTexture,看例子代码: CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture *screen = CCRenderTexture::create(size.width, size.height); CCScene *scene

2014-02-11 21:38:50 18816 1

原创 cocos2dx之引入Sqlite3数据库

从性能上说,XML方式的存储基本可以满足1 MB以下的存储要求。但在更复杂的情景中,我们可能需要存储多种不同的类,每个类也需要存储不同的对象,此时XML存储的速度就将成为瓶颈。即便分文件存储,管理起来也很麻烦,这个时候可以引入数据库来提升存储效率。 关系数据库是一种经典的数据库,其中的数据被组织成表的形式,具有相同形式的数据存放在同一张表中,表内每一行代表一个数据。在表的基础上,数据库为我们

2014-02-11 16:16:21 13804 3

原创 cocos2dx之CCUserDefault及其数据进行加密解密

CCUserDefault是Cocos2d-x引擎提供的持久化方案,其作用是存储所有游戏通用的用户配置信息,例如音乐和音效配置等。为了方便起见,有时我们也可以用CCUserDefault来存储金币数目这种简单的数据项。 CCUserDefault可以看做一个永久存储的字典,本质是一个XML文件,将每个键及其对应的值以节点的形式存储到外存中。值只支持int和float等基本类型. C

2014-02-11 09:42:57 7083 3

原创 cocos2dx之Box2D

Box2D是与Cocos2d-x一起发布的一套开源物理引擎,也是Cocos2d-x游戏需要使用物理引擎时的首选。二者同样提供C++开发接口,所使用的坐标系也一致,因此Box2D与Cocos2d-x几乎可以做到无缝对接。Box2D是一套基于刚体模拟的物理引擎,它的核心概念为世界、物体、形状、约束和关节.void MyBox2DLayer::initLayer() { CCSi

2014-02-10 16:36:37 3970

原创 cocos2dx之一些宏的作用

/** CC_PROPERTY_READONLY is used to declare a protected variable. We can use getter to read the variable. @param varType : the type of variable. @param varName : variable name. @param funName : "g

2014-02-10 15:32:14 4486 1

原创 cocos2dx之CCGrid3D波浪效果动作

Cocos2d-x的设计允许我们在游戏的任何部分自由地使用OpenGL,这为我们带来了无与伦比的灵活性,但同时也必须注意,滥用OpenGL会使得代码变得混乱而难以维护,因此除非迫不得已,不应首先考虑OpenGL。引擎封装了一个特殊的动作类CCActionGrid3D,可以模拟一些简单的3D特效,在一些情况下可以代替OpenGL。恰好引擎利用CCActionGrid3D提供了一个类似于我

2014-02-10 14:54:48 5756

原创 cocos2dx之CCGLProgram着色器类

引擎提供了CCGLProgram类来处理着色器相关操作,对当前绘图程序进行了封装,其中使用频率最高的应该是获取着色器程序的接口:const GLuint getProgram();该接口返回了当前着色器程序的标识符。后面将会看到,在操作OpenGL的时候,我们常常需要针对不同的着色器程序作设置。注意,这里返回的是一个无符号整型的标识符,而不是一个指针或结构引用,这是OpenGL接口的一个风格。

2014-02-10 11:33:29 5881

原创 cocos2d之CCTexture2D

它描述了一张纹理,知道如何将自己绘制到屏幕上。通过该类还可以设置纹理过滤、抗锯齿等参数。该类还提供了一个接口,将字符串创建成纹理。这里需要特别重提的两点是:该类所包含的纹理大小必须是2的幂次,因此纹理的大小不一定就等于图片的大小;另外,有别于CCImage,这是一张存在于显存中的纹理,实际上并不一定存在于内存中。

2014-02-10 09:34:15 2881

原创 cocos2dx之CCImage

CCImage在"CCImage.h"中定义,表示一张加载到内存的纹理图片。在其内部的实现中,纹理以每个像素的颜色值保存在内存之中。CCImage通常作为文件和显卡间数据交换的一个工具,因此主要提供了两个方面的功能:一方面是文件的加载与保存,另一方面是内存缓冲区的读写。我们可以使用CCImage轻松地读写图片文件。目前,CCImage支持PNG、JPEG和TIFF三种主流的图片格式。下面列举与

2014-02-10 09:27:44 6226

原创 cocos2dx之遮罩层

遮罩层,其实就是一个layer,一个只显示出你自定义显示的layer。在瞄准线中我们用了引擎封装的快捷绘图,熟悉了自定义绘图的基本流程。对于稍复杂的绘图效果,就需要调用底层的OpenGL接口了,这里我们用一个小小的例子来说明:滚动的数字表盘,在游戏中显示倒计时。在这个例子中,我们将使用OpenGL提供的遮罩效果来快速实现这一效果。 遮罩效果又称为剪刀效果,允许一切的渲染结果只在屏幕的一个

2014-01-22 15:28:52 10113 2

原创 cocos2dx之坐标变换

在绘制渲染树中,最关键的步骤之一就是进行坐标系的变换。没有坐标系的变换,则无法在正确的位置绘制出纹理。同时,坐标系的变换在其他的场合(例如碰撞检测中)也起着十分重要的作用。因此在这一节中,我们将介绍Cocos2d-x中的坐标变换功能。首先,我们来看一下transform方法,其代码如下所示:void CCNode::transform(){ kmMat4

2014-01-21 14:45:36 4424

原创 cocos2dx之渲染树的绘制

无论如何复杂的游戏场景也都是精灵通过不同的层次、位置组合构成的,因此只要可以把精灵按照前后层次,在不同的位置绘制出来就完成了游戏场景的绘制。(这里仅考虑由精灵构成的简单游戏,复杂的游戏也许会包含其他游戏元素,但是原理上并不冲突。)在第3章学习游戏元素时,我们曾接触过Cocos2d-x的渲染树结构,渲染树是由各种游戏元素按照层次关系构成的树结构,它展示了Cocos2d-x游戏的绘制层次,因此游戏的渲

2014-01-21 14:04:15 6976

原创 cocos2dx之OpenGl绘图

随着OpenGL的发展,其提供的绘图函数也变得多种多样。对于同一个效果来说,常常有多种不同的实现方法,因此想要在此对OpenGL的绘图函数进行全方位的介绍是不可能的,这里我们只简单介绍Cocos2d-x中常用的绘图函数。例子代码: void draw() { static CCSize winSize = CCDirector::sharedDirector(

2014-01-21 11:50:33 6794

原创 cocos2dx之瓦片地图

瓦片地图就是为了解决前面提到的问题而产生的。一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。在Cocos2d-x中,瓦片地图实现的是TileMap方案,TileMap要求每个瓦片占据地图上一个四边形或六边形的区域。把不同的瓦片拼接在一起,就可以组成一个

2014-01-20 16:41:53 6261

原创 cocos2dx之粒子系统

在粒子效果中,通常存在一个对所有粒子进行统一调度的引擎,称作粒子系统(partical system),它负责粒子的产生,随时间改变粒子的状态,以及最后回收不再需要的粒子。如果按照粒子系统的维数来区分,粒子系统可以分为二维粒子系统与三维粒子系统两种。 Cocos2d-x为我们提供的粒子系统由CCParticleSystem类实现。与其他的粒子引擎一样,CCParticleSystem实现了对粒

2014-01-20 14:43:29 6118

原创 cocos2dx之文字输入

值得一提的是文字输入。正如鼠标对键盘的颠覆,从iPhone开始的触摸屏革命已然将实体键盘逼入了一个尴尬的位置,更多的交互通过触摸屏上直观的手势操作完成,但是文字输入依然是必不可少的,例如当我们需要设定用户名的时候。 在没有实体键盘的触屏手机上,文字输入通过虚拟键盘来实现。不幸的是,CCLayer并没有为我们提供一个简化的封装实现;而幸运的是,在Cocos2d-x中已经存在一个现成的文本框控件

2014-01-20 10:41:42 7161 1

原创 cocos2dx之加速器

除了触摸,移动设备上一个很重要的输入来源是设备的方向,因此大多数设备都配备了加速度计,用于测量设备静止或匀速运动时所受到的重力方向。 目前,加速度计在传统PC平台上尚未提供支持,因此在正式开始探索重力感应之前,还请读者参考附录A,将Cocos2d-x工程部署到手机或其他移动设备上。现在,Android或iOS平台均支持加速度计。 重力感应来自于移动设备的加速度计,通常支持X、Y和Z三个方向

2014-01-20 10:17:40 3799

原创 cocos2dx之触摸事件

两种Cocos2d-x触摸事件:1,我们已经见到了CCLayer处理触摸事件的方法。当我们开启CCLayer的TouchEnable属性后,层中的4个回调函数就会在接收到事件时被触发,我们把这类事件称作标准触摸(standard touch)事件,它的特点是任何层都会平等地接收全部触摸事件。2,除此以外,Cocos2d-x还提供了另一种被称作带目标的触摸事件(targeted touc

2014-01-17 11:38:10 10534

原创 cocos2dx之音效引擎

在游戏中,我们把声音分为两类。第一类是音乐,这种类型的声音通常长度较长,适合作为环境音乐(例如游戏的背景音乐)。由于它的长度较长,同一时刻通常只能播放一首音乐。第二类是音效,它的特点是长度很短,但是可以同时播放多个音效,拥有很强的表现力。在游戏开发中,我们可以十分方便地启用CocosDenshion音效引擎库。CocosDenshion位于Cocos2d-x目录下的"CocosDenshion

2014-01-17 10:38:33 26890 6

原创 cocos2dx之场景特效

CCTransitionScene派生自CCScene,换句话说,场景特效本身也是一个场景。讲到这里,聪明的读者也许已经想到了,场景特效的实现方式与复合动作类似:复合动作是一类特殊的动作,它们包含其他动作,执行复合动作时,被包含的动作也会按照一定的方式执行;而场景特效是一类特殊的场景,它们包含了另一个场景,在运行场景特效时,被包含的原场景会以添加了特效的方式显示出来。因此,特效场景的使用方法

2014-01-17 00:57:05 2886

原创 cocos2dx之弧度和角度的互换

在cocos2dx中,提供了两个宏进行弧度和角度的互换(ccMacros.h):#define CC_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) // PI / 180/** @def CC_RADIANS_TO_DEGREES converts radians to degrees */#define C

2014-01-16 11:55:25 9219

原创 cocos2dx之CCActionEase,CCEaseExponentialIn等变速Action

虽然使用CCSpeed能够改变动作的速度,然而它只能按比例改变目标动作的速度。如果我们要实现动作由快到慢、速度随时间改变的变速运动,需要不停地修改它的speed属性才能实现,显然这是一个很烦琐的方法。下面将要介绍的CCActionEase系列动作通过使用内置的多种自动速度变化来解决这一问题。CCActionEase系列包含15个动作,它们可以被概括为5类动作:指数缓冲、Sine缓冲、弹性缓冲、跳跃

2014-01-16 11:28:02 12471

原创 cocos2dx之CCSpeed

CCSpeed用于线性地改变某个动作的速度,因此,可以实现成倍地快放或慢放功能。为了改变一个动作的速度,首先需要将目标动作包装到CCSpeed动作中:看个例子代码: CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFram

2014-01-16 11:06:46 5095

Java手游源码 炫舞派对源码(解锁版)eclipse可以打开 .zip

Java手游源码 炫舞派对源码(解锁版)eclipse可以打开

2019-06-12

MYSQL必知必会

对MYDQL的一个全面、详细的了解和掌握需要知道的

2012-10-02

CC++高质量编程

对C/C++的代码格式以及相关编写代码需要注意的细节问题。

2012-10-02

空空如也

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

TA关注的人

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