随笔分类 - Cocos2d-x
摘要:使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG隐藏在引擎的底层。接下来是场景还原:在某个节点下,需要执行这样一段逻辑,在游戏场景中,添加几个节点,由于游戏场景就是该节点的父节点,于是就直接getParent然后调用父节点的addChild,在onEnter函数中添加看上去比较合适,因为这时候该节点的父节点可以访问,而在init函数中,还没有被添加到游戏场景中神奇的事情发生了,在这之后添加的节点,都无法播放动画了,而把节点添加的位置,移到该节点
阅读全文
摘要:1 init()和onEnter()这俩个方法都是CCNode的方法。其区别如下: 2 3 1.其被调用的顺序是先init(),后onEnter()。 4 5 6 7 2.init()在类的初始化时只会调用一次。 8 9 10 11 3.onEnter在该类被载入场景的时候被调用,可能会发生多次。12 13 14 15 4.CCLayer* cclayer = new MyLayer();16 17 这种情况下,只会触发onEnter。18 19 5.CCLayer* cclayer = MyLayer::create();20 21 这样情况下,既会触发init()方法,也会...
阅读全文
摘要:1.在layer中调用:1 setKeypadEnabled(true);layer中重写以下两个方法: 1 virtual void keyBackClicked(); 2 virtual void keyMenuClicked(); 3 4 void CBaseLayer::keyBackClicked() 5 { 6 int iManSceneTag = CCDirector::sharedDirector()->getRunningScene()->getTag();//如果是主场景,则退出 7 if (MAIN_SCENE_TAG == iManSceneTag) 8 {
阅读全文
摘要:一.基本用法1.声明初始化变量1 cocos2d::CCArray* pArray;2 pArray=CCArray::createWithCapacity(100);3 pArray->retain();//如果保留成员变量的话,此处必须retain,否则会崩溃,因为标记了autorelease2.添加元素到数组1 CCSprite* pRet=CCSprite::create("test.png");2 pArray->addObject(pRet);//将pRet添加到数组0位置,此处会调用一次pRet的retain3.删除元素1 //下面这两个函数都能够
阅读全文
摘要:在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。android:screenOrientation="landscape"是限制此页面横屏显示,android:screenOrientation="portrait"是限制此页面数竖屏显示。
阅读全文
摘要:游戏暂停界面:cocos2d-x中游戏暂停界面提供的思路是用pushScene()和popScne(),即推进和弹出场景,当游戏暂停时,推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,如Resume,ReStart,Quit等,当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。(场景就像一张纸,我们推进一个场景,相当于在这张纸上再盖上一张,弹出场景相当于将最表面的那张纸拿掉)。推进暂停场景的相关代码如下:1 CCRenderTexture *renderTexture = CCRenderTexture::create(800,
阅读全文
摘要:我们时常需要这么些功能,弹出一个层,给与用户一些提示,这也是一种模态窗口,在没有对当前对话框进行确认的时候,不能继续往下操作。功能分析我们设计一个对话框,对话框上有几个按钮(个数可定制),当然有个标题,会让别人一眼看出它之功用,里面可以有些详细的提示文字,需要是模态窗口,而且窗口的大小可变,这样能够更好的适应不同的屏幕的大小。当然还有一个重要的功能,弹出效果 ~ 虽然从技术角度来说,实现起来并不难,或者说非常简单,但这会以一个很好的用户体验展示给用户。代码1.弹出框类PopupLayer.h 1 // 2 // PopupLayer.h 3 // PopupDemo 4 // 5 // ...
阅读全文
摘要:缓存在软硬件设计中是一个十分常见的优化方法,多用于高性能软硬件的设计。简单地说,缓存就是利用存储器的速度等级差异,将低速存储中使用频率高的内容加载到高速存储中,这样可以有效提高访问速度。比如将常用的图片资源从磁盘读到内存,将常用的程序段从内存搬到CPU的高速缓存中。移动设备比较常用的是外存到内存的缓存。尽管大部分手机使用闪存作为外部存储已经比PC上磁盘的速度快得多,但相比内存而言还是差了两到三个数量级。从闪存内读取一张图片平均会耗费接近0.1秒的时间,这样反复加载将占用非常多的系统资源。而缓存机制可以预先加载我们需要的内容到内存,并且在之后的操作中重复使用。缓存空间毕竟有限,每一个缓存都应该实
阅读全文
摘要:最近我们的cocos2d-x游戏项目已经进入了正式开发的阶段了,几个dev都辛苦码代码。cocos2d-x还是一套比较方便的api的,什么action啊、director啊、ccpoint啊都蛮便捷的。但是我看到几个dev有时候会很不知道用它们,还是首先自己去写函数……用一些比较原始、低效率的方法……甚至是copy / paste………………。……。这不科学啊!你不能这么勤劳啊!你这么勤劳要出事的啊!每年有多少程序员过劳死啊!程序员一定要是懒骨头才是正道啊!首先第一个,看到有问题,要写很多代码处理问题,自己动手,丰衣足食——不是一条好路,是一条革命的老路。我们前面有那么多前任程序员的尸体,要学
阅读全文
摘要:重新设置一个随机种子。。。 如果没有srand((unsigned)time(NULL));运行以下程序,每次输出结果会都是一样的。。。。。 void test_Random(void) { srand((unsigned)time(NULL)); for(int i = 0; i < 20; i++) { CCLOG("%d", (int)(CCRANDOM_0_1() * 100)); } }
阅读全文
摘要:在这篇文章中,我们将讲下CCTableView,顾名思义,CCTableView表试图,在ios里是tableview,android里是listview,都是差不多的意思,在cocos2dx中CCTableView继承自CCScrollview。OK,下面我们直接上代码:在头文件.h中: 1 class HelloWorld : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,cocos2d::extension::CCTableViewDataSource 2 { 3 public: 4 ...
阅读全文
摘要:在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。下面介绍两种方式实现双击事件的处理。(一)方法一第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击进行判断处理了。注意到由于要获取两次touch之间的touch时间,而且是以毫秒为单位,所以需要用到下面这个方法:1 //获取系统的毫秒时间2 long millisecondNow()3 {4 struct c...
阅读全文
摘要:模态对话框(其本身是一个Layer)是指只有该对话框能够响应触摸操作,而其它层不能响应此触摸操作。模态对话框一般在场景中的最上层。模态对话框会有两种触摸代理,一种是对话框该层本身,还有一种是CCMenu。cocos2d-x使用优先级来管理触摸代理,优先级数越小,响应优先级越高。对于同一个触摸,如果有优先级数字更小的代理响应了,则优先级数字更大代理不再响应此触摸。要想拦截模态对话框下的层(包括菜单)对触摸消息不响应,我们必须将的模态对话框优先级设置小于-128 ,并且如果此触摸只要被响应了就会吞噬掉(CCTouchDispatcher::addTargetedDelegate中第三个参数设置为t
阅读全文
摘要:在Cocos2d-x中经常碰到init() 和 onEnter()init()和onEnter()这两个方法都是CCNode的方法。1.二者的执行顺序是:先init() 后onEnter()。2.init()在类的初始化时只会调用一次。3.onEnter在该类被载入场景的时候被调用,可能会发生多次。下面提供这样一个demo判断二者的执行顺序:BaseFile.h 1 #ifndef __trydemo__BaseFile__ 2 #define __trydemo__BaseFile__ 3 4 #include 5 #include "cocos2d.h" 6 USING
阅读全文
摘要:CCProgressTimer,创建使用这个节点可以大致实现两个作用的效果:其一:在游戏中几乎大部分的游戏启动界面都是游戏加载画面,那么用到的一般是进度条提示加载进度,其使用的就是CCProgressTimer。其二:在游戏中需要对精灵的出现等动作制作一些渐显的效果。(1)类型一般就是两种:1 typedef enum {2 /// Radial Counter-Clockwise3 kCCProgressTimerTypeRadial,4 /// Bar5 kCCProgressTimerTypeBar,6 } CCProgressTimerType;①类型1...
阅读全文
摘要:CD动画,也就是技能冷却。介绍:技能冷却的效果跟魔兽世界中的技能冷却类似,功能如下:技能图标点击时会有按下效果,抬起后开始冷却计时,冷却计时技术后该图标才可以再次进行点击。实现:三层实现:最下方是CCMenuItemImage 按钮图片 -- normal中间是半透明模版图片 -- stencil最上方是CCProgressTimer 图片是最下图中较大的图片 -- click这是使用的图片资源(normal,click,stencil)动画原理:非冷却状态时只显示CCMenuItemImage,当冷却开始计时时,将按钮设为不可点击状态,同将半透明模板和进度条精灵设置为可见状态,并且进度条精灵
阅读全文
摘要:阅读cocos2d-x demo的代码,我们会看到有些头文件中使用CREATE_FUNC这个宏,那么它是做什么的呢?在cocos2d-x 又是起什么作用呢?下面我们就一起来看看CREATE_FUNC宏的源代码。 1 /** 2 * define a create function for a specific type, such as CCLayer 3 * @__TYPE__ class type to add create(), such as CCLayer 4 */ 5 #define CREATE_FUNC(__TYPE__) \ 6 static __TYPE__* c...
阅读全文
摘要:看过cocos2d-x 自带demo的朋友相信很多人都会发现demo中用了很多do{}while(0)和CC_BREAK_IF宏.他们是做什么用的呢? 其实这个是c++中的一个技巧. 我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象。 1 int* p1 = new int; 2 3 CCObject* o1 = fun1(); 4 if(!o1) goto catchcode; 5 6 CCObject* o2 = fun2(...
阅读全文
摘要:Cocos2D-x基础学习笔记到这里就要结束了,其中有几块没有介绍的以后会单独介绍,比如:瓦片、物理引擎、网络等。这里就不在基础学习笔记系列中介绍了,在最后一个学习笔记中,我们来看一下Cocos2D-x中常用的宏。 1 NS_CC_BEGIN:Cocos2D-x命名空间开始,属于Cocos2D-x的类的定义以该宏开头,用以代替C++中的“namespace cocos2d{”。 2 3 NS_CC_END:Cocos2D-x命名空间结束,属于Cocos2D-x的类的定义以该宏结束,用以代替“}”。 4 5 USING_NS_CC:声明Cocos2D-x的命名空间,代替”usi...
阅读全文
摘要:在Cocos2D-x中通过CCRenderTexture可以实现更好的渲染效果。本节就来看一下CCRenderTexture的使用、和其它渲染的对比。 1、CCRenderTexture的使用 使用CCRenderTexture的过程总结起来就一句话,首先用begin方法开始整个控制,采用节点中的visit方法加入渲染,最后调用end方法介绍整个控制并渲染。使用的示例如下: 1 //定义一个CCRenderTexture对象,参数为宽高 2 CCRenderTexture* rend = CCRenderTexture::create( 32,64, kCCTexture2DPixel...
阅读全文
浙公网安备 33010602011771号