您的位置:首页 > 移动开发 > Cocos引擎

【Cocos2D-X游戏开发笔记2】自定义场景及场景切换效果

2013-03-31 20:29 453 查看
自定义场景类MyGameLayer,代码如下:

MyGameLayer.h如下

#ifndef __MYGAMElAYER_SCENE_H__
#define __MYGAMElAYER_SCENE_H__
#pragma once
#include "cocos2d.h"
//使用cocos2d命名空间  
USING_NS_CC; 
class MyGameLayer :	public cocos2d::CCLayer
{
public:
	MyGameLayer(void);
	virtual ~MyGameLayer(void);
	static cocos2d::CCScene* scene();  
	virtual bool init(); 
	CREATE_FUNC(MyGameLayer);
};

#endif // __MYGAMElAYER_SCENE_H__

MyGameLayer.cpp如下

#include "MyGameLayer.h"
MyGameLayer::MyGameLayer(void)
{
}

MyGameLayer::~MyGameLayer(void)
{
}

//创建场景
cocos2d::CCScene* MyGameLayer::scene(){
	CCScene *scene = NULL;
	do{
		scene = CCScene::create();
		CC_BREAK_IF(!scene);  
		MyGameLayer *gLayer = MyGameLayer::create();//需要定义CREATE_FUNC(MyGameLayer)宏
		CC_BREAK_IF(!gLayer); 
		scene->addChild(gLayer);
	}while(0);
	return scene;
}

bool MyGameLayer::init(){
	bool ret =false;
	do{
		CC_BREAK_IF(!CCLayer::init());
		CCSprite *s = CCSprite::create("bg.png");
		s->setPosition(ccp(240,160));
		this->addChild(s,0);
		ret = true;
	}while(0);
	return ret;
}

如何切换到自定义的MyGameLayer?

HelloCpp工程中做如下修改:

1)HelloWorldScene.h引入头文件

#include "MyGameLayer.h"

2)修改HelloWorld::init,创建一个菜单,点击菜单后切换到自定义的MyGameLayer

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());
		//创建开始菜单项
		CCMenuItemImage *goNext = CCMenuItemImage::create("start1.png","start1.png",  
            this,menu_selector(HelloWorld::goNextScene));
		CCSize size = CCDirector::sharedDirector()->getWinSize();
		//创建菜单
		 CCMenu* pMenu = CCMenu::create(goNext, NULL);
		 pMenu->setPosition(ccp(size.width/2,size.height/2));
		this->addChild(pMenu, 1);

		CCLog("after init");
        bRet = true;
    } while (0);
    return bRet;
}
void HelloWorld::goNextScene(CCObject* pSender){
	CCLog("goNextScene");
	//跳转到游戏场景中
	//CCScene *gScene = MyGameLayer::scene();
	CCScene *s = MyGameLayer::scene();
	//CCDirector::sharedDirector()->replaceScene(s);

	//跳跃式,本场景先会缩小,新场景跳跃进来
	//CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::transitionWithDuration(3, s));  
	//依次测试其它切换效果
	//CCDirector::sharedDirector()->replaceScene(CCTransitionFade::transitionWithDuration(3, s));
	//CCDirector::sharedDirector()->replaceScene(CCTransitionFlipY::transitionWithDuration(3, s,kOrientationRightOver));
	//CCDirector::sharedDirector()->replaceScene(CCTransitionZoomFlipAngular::transitionWithDuration(3, s,kOrientationRightOver));
	CCDirector::sharedDirector()->replaceScene(CCTransitionTurnOffTiles::transitionWithDuration(3, s));
}

其它切换效果有:

CCTransitionJumpZoom::transitionWithDuration(t, s);//跳跃式,原场景先会缩小,新场景跳跃进来

CCTransitionFade::transitionWithDuration(t, s);//淡出淡入,原场景淡出,新场景淡入

CCTransitionFade::transitionWithDuration(t, s, ccRED);//第三个参数就是淡出淡入的颜色,默认是黑色

CCTransitionFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//x轴左翻

CCTransitionFlipX::transitionWithDuration(t, s, kOrientationRightOver);//x轴右翻

CCTransitionFlipY::transitionWithDuration(t, s, kOrientationUpOver);//y轴上翻

CCTransitionFlipY::transitionWithDuration(t, s, kOrientationDownOver);//y轴下翻

CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//带角度转的左翻

CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//带角度转的右翻

CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果x轴左翻

CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果x轴右翻

CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationUpOver);//带缩放效果y轴上翻

CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationDownOver);//带缩放效果y轴下翻

CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果/有角度转的左翻

CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果有角度转的右翻

CCTransitionShrinkGrow::transitionWithDuration(t, s);//交错换

CCTransitionRotoZoom::transitionWithDuration(t, s);//旋转效果

CCTransitionMoveInL::transitionWithDuration(t, s);//新场景从左移入覆盖

CCTransitionMoveInR::transitionWithDuration(t, s);//新场景从右移入覆盖

CCTransitionMoveInT::transitionWithDuration(t, s);//新场景从上移入覆盖

CCTransitionMoveInB::transitionWithDuration(t, s);//新场景从下移入覆盖

CCTransitionSlideInL::transitionWithDuration(t, s);//新场景从左移入推出原场景

CCTransitionSlideInR::transitionWithDuration(t, s);//新场景从右移入推出原场景

CCTransitionSlideInT::transitionWithDuration(t, s);//新场景从上移入推出原场景

CCTransitionSlideInB::transitionWithDuration(t, s);//新场景从下移入推出原场景

CCTransitionCrossFade::transitionWithDuration(t,s);//淡出淡入交叉,同时进行

CCTransitionPageTurn::transitionWithDuration(t, s, false);//翻页,前翻

CCTransitionPageTurn::transitionWithDuration(t, s, true);//翻页,后翻

CCTransitionFadeTR::transitionWithDuration(t, s);//向右上波浪

CCTransitionFadeBL::transitionWithDuration(t, s);//向左下波浪

CCTransitionFadeUp::transitionWithDuration(t, s);//向上百叶窗

CCTransitionFadeDown::transitionWithDuration(t, s);//向下百叶窗

CCTransitionTurnOffTiles::transitionWithDuration(t, s);//随机小方块

CCTransitionSplitRows::transitionWithDuration(t, s);//按行切

CCTransitionSplitCols::transitionWithDuration(t, s);//按列切
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: