地球人己阻止不了程序猿们学习cocos2d-x了-学习笔记04
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址: http://blog.csdn.net/musicvs/article/details/8135705
正文:
教程地址:http://cn.cocos2d-x.org/bbs/forum.php?mod=viewthread&tid=979&extra=page%3D1
这篇教程太可恶了,一下子塞了好多知识啊喂,我都还没有吸收完,说说我吸收的部分吧。
1. 每一帧都想做操作?
有时候,我们需要在每一帧的时候都做一些操作,比如判断碰撞什么的,那么,CCNode就拥有这个功能。
只要是继承了CCNode的类都拥有update方法,update方法会在游戏的每一帧都调用一次,前提是,我们的类加入到了场景中,并且调用了这个方法:scheduleUpdate()。
这样,update方法就会每一帧都被调用,在里面尽情做操作吧。
#ifndef __SIMPLE_MOVE_CONTROLLER_H__ #define __SIMPLE_MOVE_CONTROLLER_H__ #include "Controller.h" /************************************************************************/ /* 简单移动控制器 /* 只会往左移动 /************************************************************************/ class SimpleMoveController : public Controller { public: virtual void update(float dt); virtual bool init(); static SimpleMoveController* create(); void setiXSpeed(int iXSpeed); private: int iXSpeed; /* X方向移动速度*/ }; #endif
bool SimpleMoveController::init() { bool bRet = false; do { this->scheduleUpdate(); bRet = true; } while (0); return bRet; } void SimpleMoveController::update( float dt ) { if(this->listener) { this->listener->updatePosition(dt, iXSpeed, 0.0f); this->listener->hideIfDead(); } }
2. 播放音乐
这个游戏不可缺少的呢,cocos2d-x已经封装好了,我们要调用很简单:
/* 1.播放音乐有两种,一种是长时间播放的背景音乐,一种是瞬间播放的效果音乐 2.播放音乐之前需要预先加载音乐,调用preload*方法即可 3.播放背景音乐调用playBackgroundMusic,停止的话调用stopBackgroundMusic 4.播放效果音乐调用playEffect,不需要主动停止 */ CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(MUSI_BACKGROUND); CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(MUSI_LASER); CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(MUSI_BACKGROUND); CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect(MUSI_LASER);
3. 数组还是list?
Java里的ArrayList用得好舒服,不过在cocos2d-x 2.x版本里好像已经没有类似这样的功能了。换成了CCArray,这个也是列表的功能,但是已经没有了类型限制了,什么类型都能放进去,自己小心点就是了。
用法很简单:
/* 创建怪物*/ CCArray *mMonsterArray = CCArray::createWithCapacity(MAX_NUM); mMonsterArray->retain(); Monster* mMonster = NULL; for(int i = 0; i < MAX_NUM; i++) { mMonster = Monster::createWithBatchNode(batchNode); mMonsterArray->addObject(mMonster); }
createWithCapacity的方式创建CCArray,就是指定了这个列表有多大。
至于retain,大概的意思是,CCArray会在使用后立即被释放,而不是等我们主动释放,也就是说,我们的函数结束了,CCArray对象也结束了。调用了retain之后,CCArray就不会自己释放,而是等我们主动释放,我们可以等到析构函数执行时再释放。不然我们在游戏过程中就操作不了数组了。
然后,怎么遍历CCArray?cocos2d-x也已经写好了:
CCObject* obj = NULL; CCARRAY_FOREACH(mMonsterArray, obj) { Monster* mMonster = (Monster*) obj; }
不多说了,我也只会用而已,这个CCARRAY_FOREACH是一个宏,大概的操作就是从数组的第一个指针到最后一个指针的for循环。
4. 再论update方法
Update方法几乎不可或缺了,这里有一点想提醒一下,我在写这个游戏Demo的过程中,总是发现对象的update方法没有被调用,原因是,我的这个对象没有加入到场景中。
所以,自己建的类对象,千万不要忘记加入到场景中。
在代码中多次出现只有CCSpriteBatchNode对象,没有CCLayer对象的情况下,怎么把我的对象添加到layer场景呢?很简单,CCSpriteBatchNode对象有一个getParent方法,用这个方法就可以获得CCLayer对象了,然后addChild,搞定。
5. 关于释放资源
释放资源当然也很重要,在这篇教程中,我了解到:
1. 使用CC_SAFE_RELEASE释放CCArray对象
2. 使用CC_SAFE_DELETE释放普通指针对象
3. 普通对象调用autoRelease方法会自动回收对象
我仅限于了解,也许要在以后开发过程中碰到这些问题才能深刻理解吧。
大概就这么多了,还有很多游戏开发的思想在这个小游戏中也体现出来了,对于我这种开发游戏不多的人,很受益。
6 . 说说这个小游戏的大概思想流程
我自己按照教程写了一个,比教程的要简陋一些,下载地址:http://download.csdn.net/detail/musicvs/4709955