- 博客(27)
- 收藏
- 关注
原创 Cocos2d-x中,如何更快地加载大量重复粒子
上次看一个教程,是用ClippingNode,Image和粒子,写的一个能把图片一点一点消除的程序,而且消除的时候会在消除的部分创建一个相同颜色的粒子效果,看起来还是挺炫的。不过遇到了一个问题,教程上是每次都通过文件创建粒子,实际上这样创建的话,如果图片比较大,那么需要创建非常多非常多的粒子,就会造成卡顿。通过翻看代码,发现ParticleSystemQuad类有一个创建函数如下:st
2015-08-25 08:37:43
917
原创 使用欧拉筛法求素数和
上一次写到了厄拉多塞筛法,说到厄拉多塞筛法随着计算上限的成倍增加,计算时间也会成倍增加。这次的欧拉筛法在时间这方面会比厄拉多塞筛法好很多。
2015-08-24 17:22:47
963
原创 Cocos2d-x中,ProgressTimer类的用法
ProgressTimer类继承于Node.ProgressTimer类的create函数定义如下:static ProgressTimer* create(Sprite* sp);可以看出它是通过Sprite类对象创建的。它有两个Type:enum class Type{ RADIAL,/** Radial Counter-Clockwise. */ BAR
2015-08-23 23:58:39
2575
原创 Cocos2d-x中,ProgressTo类的使用
ProgressTo类继承于ActionInterval类,所以是一个间隔动作。API文档中对其描述如下:Progress to percentage.简单的我已经懒得吐槽了。还是看看官方的示例吧,示例的代码如下: auto s = Director::getInstance()->getWinSize(); auto to1 = Sequence::cre
2015-08-23 17:58:55
2128
原创 Cocos2d-x中,Speed类的使用
跟Follow类一样,Speed类也是直接继承于Action类的。API文档中,对Speed类的解释如下:Changes the speed of an action, making it take longer (speed>1) or less (speedSpeed类的Create函数如下:static Speed* create(ActionInterval* acti
2015-08-23 12:33:15
1405
原创 Cocos2d-x中,Follow类的使用
Follow类是直接继承自Action类的,地位很高啊。API文档中对于它的作用介绍如下:Follow is an action that "follows" a node.还是一贯的言简意赅。Follow类的Create函数如下:static Follow* create(Node *followedNode, const Rect& rect = Rect::ZERO)
2015-08-22 23:58:52
3114
原创 Cocos2d-x中,ActionInstant类的各个子类
API文档中,ActionInstant类的解释是这样的:Instant actions are immediate actions.Inherits FiniteTimeAction.Inherited by CallFunc, FlipX, FlipY, Hide, Place, RemoveSelf, ReuseGrid, Show, StopGrid, and ToggleVi
2015-08-21 10:52:52
620
原创 Cocos2d-x中,ControlSlider的基本用法
ControlSlider是一个可滑动的控件,有一个背景,一个前景,一个可滑动的按钮组成。下面是它的create函数://使用图片创建static ControlSlider* create(const char* bgFile, const char* progressFile, const char* thumbFile); //使用精灵创建static ControlSl
2015-08-15 02:06:48
2030
原创 Cocos2d-x中,使用Image类获取图片某一点的颜色
要获取图片的某一点的颜色,先要创建Image对象。Image* test = new Image();//使用图片名初始化Imagetest->initWithImageFile("test.png");Image会开辟一段内存用来存储图片的颜色信息。存储的方法是每一像素点用4个字节来存储,其中4个字节分别存储了颜色的R\G\B\A,也就是红、绿、蓝和透明度。由于在32位的情况下,
2015-08-13 00:07:16
1851
原创 Cocos2d-x中,在过渡场景异步加载图片和声音
游戏需要在过渡场景中完成对资源的加载。对于图片的加载,可以使用TextureCache::addImageAsync或是TextureCache::addImage加载。TextureCache::addImage为同步加载,其会在主线程中进行图片加载,这就有可能在加载时间比较长时,阻塞主线程。TextureCache::addImageAsync为异步加载,其在加载时会创建新的线
2015-08-11 17:06:47
1051
原创 Cocos2d-x中,创建Animate的几种方法
可以把常见的Animate的创建方法封装成几个函数,在使用时进行调用。第一种方法使用do...while循环实现,不需要知道图片的数量,只要有图片的名字就可以,代码如下:Animate* Create(const char *iName, int iloops, float delay){ SpriteFrame* frame = NULL; Animation* animation
2015-08-11 11:03:35
820
原创 Cocos2d-x中,反转横板游戏里的主角
有些横板游戏中的主角需要既能往前跑,也能往后跑。此时并不需要两套素材和两个精灵。只需要使用精灵的setFlippedX函数即可完成,并且使用精灵进行的动画也都可以实现水平翻转。一个小例子如下:bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } Size visibleSize = Directo
2015-08-10 18:01:27
794
原创 Lua中,泛型for循环遍历table时,ipairs和pairs的区别
为了看出两者的区别,首先定义一个table:a={"Hello","World";a=1,b=2,z=3,x=10,y=20;"Good","Bye"}使用ipairs对其进行遍历:for i, v in ipairs(a) do print(v)end输出的结果是:HelloWorldGoodBye可见ipairs并不会输出table中存储的键值对,会跳过键值
2015-08-05 20:32:18
13284
原创 Cocos2d-x中,实现类似捕鱼达人的炮台
要实现一个炮台,可以先把子弹放一边,把炮台的事给搞定。炮台需要做的就是当点击屏幕上某一点时,炮台会旋转,并且指向该点。把旋转的方法写到onTouchBegan里面即可,代码如下:bool HelloWorld::onTouchBegan(Touch* touch, Event* event){ //获取点击的位置 touchPoint = touch->getLocation();
2015-08-05 17:28:50
2124
原创 使用厄拉多塞筛法计算素数的和
求N以内所有素数的和,最普通的方法是对N以内所有自然数进行一次是否为素数的判断,然后将所有素数相加。然而对某个自然数s是否为素数的判断是相当费时间的,需要判断其是否可以整除0到s^0.5之间的所有自然数,如果s很大的话,这将相当耗时。两千多年前的数学家厄拉多塞提出的厄拉多塞筛法可以一定程度上减少计算素数和时的工作量。维基百科上埃拉托斯特尼筛法词条中有一个很直观的示意图,如下:
2015-08-03 11:52:45
1556
原创 如何判断一个自然数是否为素数
判断一个自然数是否为素数,最先想到的是根据素数的定义,对自然数n,求2到n-1之中是否有某个数可以被n整除,如果没有则可判定其为素数,如果有则为合数。实际判断中,并不需要判断这么多数,只要判断2到根号n之间的自然数即可。代码如下:#include #include using namespace std;int main(){ int n; while(ci
2015-08-02 11:36:06
1071
原创 Cocos2d-x中,addObserver如何传递消息
addObserver这个函数一般是用来接收消息的,但是这个函数的定义如下:void __NotificationCenter::addObserver(Ref *target, SEL_CallFuncO selector, const
2015-07-28 16:45:07
1360
原创 Cocos2d-x中,使用NotificationCenter在Layer之间传输数据
使用NotificationCenter在同场景的不同层之间传输数据:1.在第一个层里添加发送消息的函数bool HelloWorld::init(){ scheduleOnce(schedule_selector(HelloWorld::sendMsg), 3.0f); //在3秒后调用sendMsg函数 return true;}void HelloWorld::sen
2015-07-28 12:39:00
503
转载 Cocos2d-x中,onEnter与init的区别
这个问题我百度了下,没有找到好的答案,google了一下,找到了我想要的答案,都是很简单的英文,不翻译了。原链接:https://stackoverflow.com/questions/20769747/difference-between-cclayerinit-and-cclayeronenter/20773133#20773133Cocos2d-x has its mem
2015-07-27 18:01:47
666
原创 Cocos2d-x中,如何通过触摸来移动一个精灵
Cocos2d-x中,如何通过按住一个精灵移动手指,使精灵跟随手指移动,方法如下:首先添加精灵,定义触摸事件bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } ball = Sprite::create("Ball.png"); auto listener = EventListenerTo
2015-07-27 12:46:26
1382
原创 如何不进行逻辑判断来比较两个数的大小
如何不进行逻辑判断,输出两个数之间比较大的那个数字,不能使用if,三目运算符等方法。方法如下:#include #include int main(){ int a=10; int b=20; printf("%d",((a+b)+abs(a-b))/2); return 0;}代码很简单,原理也很简单,abs(a-b)结果为a与b之间的差值,
2015-07-26 23:14:00
702
原创 Cocos2d-x中获取系统时间
在Cocos2d-x中,有时需要获取当前系统的时间。方法如下:time_t t = time(NULL);//创建time_t变量并初始化tm* lt = localtime(&t);//创建tm*变量,将其指向localtimelog("%d", lt->tm_hour);//显示现在小时log("%d", lt->tm_min);//显示现在分钟log("%d", lt->tm_s
2015-07-24 14:12:51
627
原创 Cocos2d-x中的CCARRAY_FOREACH的使用
CCARRAY_FOREACH是Cocos2d-x中经常被用到的一个宏,它提供了对__Array的正向遍历。CCARRAY_FOREACH的定义如下:#define CCARRAY_FOREACH(__array__, __object__)
2015-07-22 16:36:57
1184
原创 Cocos2d-x中关于schedule函数的一点理解
今天看到一段代码,如下:this->schedule(schedule_selector(HelloWorld::Hello),20.0);因为函数的参数没有写全,所以就像看看schedule函数别的参数默认情况下是什么情况,发现schedule函数两个参数的情况下,构造函数如下:
2015-07-22 06:14:41
1162
原创 C++11中,获取随机数的新方法default_random_engine
C++11中,提供了一种新的获取随机数的方法。以前获取伪随机数都是用的rand,想要获取两个数之间的伪随机数,方法如下:int min,max;//定义上下边界int range=max-min;//获取中间的范围int randNum = rand() % range + min;//生成介于min和max之间的伪随机数今天看《C++ Primer 5th Edit
2015-07-22 00:11:52
24119
原创 Cocos2d-x中AnimationCache的用法
AnimationCache是一个单例类。可以用来存储创建好的Animation.存储时使用函数void addAnimation(Animation* animation,const std::string & name)将一个Animation变量和它的名字存储到AnimationCache中。删除时使用函数void removeAnimation(const std::string&
2015-07-21 17:31:45
1070
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人