Cocos2D-X2.2.3学习笔记18(场景切换)

经过我们中一系列的学习,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中怎么用的就行了


到此为止,动画系统算是真的完了。其实我觉得有点难的还是延时动画那块,根本记不住的。只有多用


不过,我记不住一般都会把那章的博客翻开看看,其实也就参数,有些忘记了是什么意思



源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值