经过我们中一系列的学习,Cocos2dx的基础大致了解了。总共分为坐标系统,UI系统,内存管理,事件机制,缓存系统,绘图,以及动画系统。
Cocos2dx中动画系统是及其强大的,我们也分为很多章节进行了学习。今天我们来还是来学习动画系统相关的知识,后面在介绍地图,音频,和物理引擎就差不多了
至于,什么弱联网,用户数据存储,游戏优化,Java和C++互调等等,都是扯皮,学了也觉得没啥用,这些还是等做项目的时候边做边学来的实在
我们的目的是学习的东西能够用得到,用不到的就算学了,过几天就忘了。呃!扯多了,开始入正题
以前我们总是在一个场景中进行操作。但是在实际过程中往往不止一个场景。
就比如拍电影,你不可能总是一个背景从头到尾吧??当然,你也可以通过图层的添加和移除来进行切换同样能达到效果,但那样代码的可读性和可维护性就差很多了
场景是什么??这就不用说了。我们经常见到的HelloWorldScene就是一个场景
要两个场景进行互相切换,当然我们还得另外新建一个场景咯,这里我就命名为GameOver吧!游戏结束场景,代码如下
#ifndef _GAMEOVER_SCENE_H_
#define _GAMEOVER_SCENE_H_
#include "cocos-ext.h"
using namespace cocos2d;
using namespace cocos2d::extension;
class GameOver:public CCLayerColor
{
public:
static CCScene* scene();
virtual bool init();
CREATE_FUNC(GameOver);
void RestartClick(CCObject* sender, CCControlEvent controlRvent);
};
#endif // !_GAMEOVER_SCENE_H_
#include "GameOver.h"
#include "HelloWorldScene.h"
CCScene* GameOver::scene()
{
CCScene* pScene= CCScene::create();
CCLayerColor* pLayerColor= GameOver::create();
pScene->addChild(pLayerColor);
return pScene;
}
bool GameOver::init()
{
if (!CCLayerColor::init())
{
return false;
}
this->initWithColor(ccc4(255,0,0,255));
CCSize size= CCDirector::sharedDirector()->getVisibleSize();
CCLabelBMFont* pLable= CCLabelBMFont::create("This is GameOver Scene","fonts/boundsTestFont.fnt");
pLable->setPosition(ccp(size.width/2,size.height/2+50));
this->addChild(pLable);
CCScale9Sprite* pBackgroundButton=CCScale9Sprite::create("button.png");
CCControlButton *pButton=CCControlButton::create
(
CCLabelTTF::create("restart", "Marker Felt", 30,CCSizeMake(150,55),kCCTextAlignmentCenter,kCCVerticalTextAlignmentCenter),
pBackgroundButton
);
pButton->setPosition(ccp(size.width/2,size.height/2));
//按钮在其内部拾起事件回调
pButton->addTargetWithActionForControlEvents(this,cccontrol_selector(GameOver::RestartClick),CCControlEventTouchDown);
this->addChild(pButton);
return true;
}
void GameOver::RestartClick(CCObject* sender, CCControlEvent controlRvent)
{
CCLog("触发事件");
CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());
}
这里我们用了.9图片和扩展的ControlButtin
我觉得比用Menu做按钮要方便一点
这里用到了replaceScene
导演替换场景
OK,现在我们来加点过度的动画
在TestCpp中我们找到了如下的代码,总共有40钟动画,用法都一样。就不一一测试了 太多了
其实,我们想要用什么动画,可以先在TestCpp中看看效果,然后找到相应的动画在用,总比盲目的一个个去试要省时间
CCDirector::sharedDirector()->replaceScene(CCTransitionMoveInB::create(1,HelloWorld::scene()));
其实,我们除了用replaceScene,还可以使用pushScene和popScene进行配合
这就像一个栈
假设,栈里有 Scene1
然后我们pushScene一个 Scene2 这是栈中场景的顺序就是 Scene2 Scene1 这时候我们显示的是Scene2
然后,我们在Scene2中popScene一下,这个没有参数,直接把Scene2移除栈了 这时就会延时Scene1
CCDirector::sharedDirector()->pushScene(CCTransitionMoveInB::create(1,HelloWorld::scene()));
CCDirector::sharedDirector()->popScene();
ok,后面还有个什么网格特效,用法也比较简单,这里就不介绍了。 看看TestCpp中怎么用的就行了
到此为止,动画系统算是真的完了。其实我觉得有点难的还是延时动画那块,根本记不住的。只有多用
不过,我记不住一般都会把那章的博客翻开看看,其实也就参数,有些忘记了是什么意思