8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画
来源:互联网 发布:威海博优化纤 编辑:程序博客网 时间:2024/04/29 13:12
1添加场景切换效果
供场景切换的类:
CCTransitionJumpZoom
CCTransitionProgressRadialCCW
CCTransitionProgressRadialCW
CCTransitionProgressHorizontal
CCTransitionProgressVertical
CCTransitionProgressInOut
CCTransitionProgressOutIn
CCTransitionCrossFade
CCTransitionFadeTR
CCTransitionFadeBL
CCTransitionFadeUp
CCTransitionFadeDown
CCTransitionTurnOffTiles
CCTransitionSplitRows
CCTransitionSplitCols
CCTransitionFade
CCTransitionShrinkGrow
CCTransitionRotoZoom
CCTransitionMoveInL
CCTransitionMoveInR
CCTransitionMoveInT
CCTransitionMoveInB
CCTransitionSlideInL
CCTransitionSlideInR
CCTransitionSlideInT
CCTransitionSlideInB
场景切换案例:
TMenu.h
#ifndef__TMenu_H__
#define__TMenu_H__
#include"cocos2d.h"
USING_NS_CC;
classTMenu:publicCCLayer
{
public:
staticCCScene *scene();
CREATE_FUNC(TMenu);
boolinit();
CCMenu *menu;
voidmenuCallback(CCObject * sender);
voidcloseCallback(CCObject * sender);
virtualboolccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);
virtualvoidccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);
};
#endif
TMenu.cpp
#include"TMenu.h"
#include"AppMacros.h"
#include"T01LayerAnchorPoint.h"
#include"T02LayerSprite.h"
#include"T03LayerZorder.h"
#include"T04ColorLayer.h"
#include"T05Coordinate.h"
#include"T06BatchNode.h"
#include"T07Schedule.h"
#include"T08Touch.h"
#include"T09Memory.h"
#include"T10Label.h"
#include"T11CCMenu.h"
#include"T12UI.h"
#include"T13Action.h"
#include"T14Animation.h"
#include"T15Speed.h"
#include"T16CCFollow.h"
#include"T17CCProgressTo.h"
#include"T18Grid3D.h"
#include"T19Draw.h"
#include"T20Music.h"
#include"T21Particle.h"
#include"T22UserDefault.h"
//供场景切换用
static CCTransitionScene * switchSceneEffect(int index,float t,CCScene *s)
{
switch (index)
{
case 0:
return CCTransitionJumpZoom::create(t, s);
break;
case 1:
return CCTransitionProgressRadialCCW::create(t, s);
break;
case 2:
return CCTransitionProgressRadialCW::create(t, s);
break;
case 3:
return CCTransitionProgressHorizontal::create(t, s);
break;
case 4:
return CCTransitionProgressVertical::create(t, s);
break;
case 5:
return CCTransitionProgressInOut::create(t, s);
break;
case 6:
return CCTransitionProgressOutIn::create(t, s);
break;
case 7:
return CCTransitionCrossFade::create(t, s);
break;
case 8:
return CCTransitionCrossFade::create(t, s);
break;
case 9:
return CCTransitionFadeTR::create(t, s);
break;
case 10:
return CCTransitionFadeBL::create(t ,s);
break;
case 11:
return CCTransitionFadeUp::create(t, s);
break;
case 12:
return CCTransitionFadeDown::create(t, s);
break;
case 13:
return CCTransitionTurnOffTiles::create(t, s);
break;
case 14:
return CCTransitionSplitRows::create(t, s);
break;
case 15:
return CCTransitionSplitCols::create(t, s);
break;
case 16:
return CCTransitionFade::create(t, s);
break;
case 17:
return CCTransitionShrinkGrow::create(t, s);
break;
case 18:
return CCTransitionRotoZoom::create(t, s);
break;
case 19:
return CCTransitionMoveInL::create(t, s);
break;
case 20:
return CCTransitionMoveInR::create(t, s);
break;
case 21:
return CCTransitionMoveInT::create(t, s);
break;
case 22:
return CCTransitionMoveInB::create(t, s);
break;
case 23:
return CCTransitionSlideInL::create(t, s);
break;
case 24:
return CCTransitionSlideInR::create(t, s);
break;
case 25:
return CCTransitionSlideInT::create(t, s);
break;
case 26:
return CCTransitionSlideInB::create(t, s);
break;
}
}
staticchar *menu_array[]
{
"T01LayerAnchorPoint.h",
"T02LayerSprite.h",
"T03LayerZorder.h",
"T04ColorLayer.h",
"T05Coordinate.h",
"T06BatchNode.h",
"T07Schedule.h",
"T08Touch.h",
"T09Memory.h",
"T10Label.h",
"T11CCMenu.h",
"T12UI.h",
"T13Action.h",
"T14Animation.h",
"T15Speed.h",
"T16CCFollow.h",
"T17CCProgressTo.h",
"T18Grid3D.h",
"T19Draw.h",
"T20Music.h",
"T21Particle.h",
"T22UserDefault.h"
};
CCScene *TMenu::scene()
{
CCScene *scene =CCScene::create();
TMenu *layer =TMenu::create();
scene->addChild(layer);
returnscene;
}
boolTMenu::init()
{
CCLayer::init();
menu =CCMenu::create();
for (inti = 0;i <sizeof(menu_array) / sizeof(*menu_array);i++)
{
CCMenuItem *item =CCMenuItemFont::create(menu_array[i],
this,
menu_selector(TMenu::menuCallback));
menu->addChild(item);
}
menu->alignItemsVertically();
addChild(menu);
CCArray * array =menu->getChildren();
CCObject *obj;
inti = 0;
CCARRAY_FOREACH(array,obj)
{
CCMenuItem *item = (CCMenuItem*)obj;
item->setTag(i + 1 + 10000);
i++;
}
CCMenuItem *closeItem =CCMenuItemImage::create("CloseNormal.png","CloseSelected.png");
closeItem->setTarget(this,menu_selector(TMenu::closeCallback));
CCMenu *menu2 =CCMenu::create(closeItem,NULL);
menu2->setPosition(CCPointZero);
closeItem->setPosition(ccp(winSize.width - closeItem->getContentSize().width / 2,
winSize.height - closeItem->getContentSize().height / 2));
addChild(menu2);
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
returntrue;
}
voidTMenu::menuCallback(CCObject * sender)
{
CCMenuItem *item = (CCMenuItem *)sender;
CCScene *pScene =NULL;
switch (item->getTag()-10000)
{
case 1:
pScene =T01LayerAnchorPoint::scene();
break;
case 2:
pScene =T02LayerSprite::scene();
break;
case 3:
pScene =T03LayerZorder::scene();
break;
case 4:
pScene =T04ColorLayer::scene();
break;
case 5:
pScene =T05Coordinate::scene();
break;
case 6:
pScene =T06BatchNode::scene();
break;
case 7:
pScene =T07Schedule::scene();
break;
case 8:
pScene =T08Touch::scene();
break;
case 9:
pScene =T09Memory::scene();
break;
case 10:
pScene =T10Label::scene();
break;
case 11:
pScene =T11CCMenu::scene();
break;
case 12:
pScene =T12UI::scene();
break;
case 13:
pScene =T13Action::scene();
break;
case 14:
pScene =T14Animation::scene();
break;
case 15:
pScene =T15Speed::scene();
break;
case 16:
pScene =T16CCFollow::scene();
break;
case 17:
pScene =T17CCProgressTo::scene();
break;
case 18:
pScene =T18Grid3D::scene();
break;
case 19:
pScene =T19Draw::scene();
break;
case 20:
pScene =T20Music::scene();
break;
case 21:
pScene =T21Particle::scene();
break;
case 22:
pScene =T22CCUserDefault::scene();
break;
}
//下面的代码用于做控制场景切换用
if (pScene != NULL)
{
static int idx = 0;
CCTransitionScene * scene = switchSceneEffect(idx++, 2, pScene);
if (idx == 27)
{
idx = 0;
}
CCDirector::sharedDirector()->replaceScene(scene);
}
}
voidTMenu::closeCallback(CCObject * sender)
{
exit(0);
}
boolTMenu::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent)
{
returntrue;
}
voidTMenu::ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent)
{
CCRectrcWin =CCRect(0, 40,winSize.width,winSize.height-80);
CCMenuItem *firstItem = (CCMenuItem *)menu->getChildren()->objectAtIndex(0);
CCMenuItem *lastItem = (CCMenuItem *)menu->getChildren()->lastObject();
CCPointfirstInWorld =menu->convertToWorldSpace(firstItem->getPosition());
CCPointlastInWorld =menu->convertToWorldSpace(lastItem->getPosition());
if (rcWin.containsPoint(firstInWorld)&&pTouch->getDelta().y<0)
return;
if (rcWin.containsPoint(lastInWorld) && pTouch->getDelta().y >0)
return;
menu->setPositionY(menu->getPositionY() + pTouch->getDelta().y);
}
运行效果:
2有时候我们想等场景切换彻底完成之后再让动画播放,这时候需要做重写以下代码:
voidonEnter();
voidonEnterTransitionDidFinish();
案例:
#include"T14Animation.h"
#include"AppMacros.h"
CCScene *T14Animation::scene()
{
CCScene *scene =CCScene::create();
T14Animation *layer =T14Animation::create();
scene->addChild(layer);
returnscene;
}
boolT14Animation::init()
{
TBack::init();
returntrue;
}
//在进入场景的时候做以下操作
voidT14Animation::onEnter()
{
TBack::onEnter();
//以图片的方式创建一个精灵
spr =CCSprite::create("animation/p_2_01.png");
//设置精灵的显示位置
spr->setPosition(ccp(winSize.width / 2, winSize.height / 2));
addChild(spr);
}
//当场景切换彻底完成之后执行的动作。
voidT14Animation::onEnterTransitionDidFinish()
{
TBack::onEnterTransitionDidFinish();
//plist中是图片信息
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/plant.plist");
//创建动画
CCAnimation *animation =CCAnimation::create();
//这个用于存储图片的名字
char nameBuf[100];
for (inti = 0;i < 8;i++)
{
memset(nameBuf, 0, sizeof(nameBuf));
sprintf(nameBuf,"p_2_0%d.png",i + 1);
animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));
}
//设置每次动画执行的时候的延时
animation->setDelayPerUnit(0.1f);
//这只循环两次
animation->setLoops(2);
CCAnimate *animate =CCAnimate::create(animation);
spr->runAction(animate);
}
上面案例在场景彻底切换完成之后新场景中的动画等效果才执行。
- 8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画
- cocos2dx 场景切换动画效果
- cocos2dx场景切换动画
- cocos2dx场景切换动画
- cocos2dx 场景切换动画
- cocos2dx场景切换动画
- Cocos2dx场景切换效果汇总
- cocos2dx场景间切换效果
- cocos2dx-3.0------场景切换效果
- cocos2dx场景切换分析之如何自定义场景切换动画
- cocos2dx常见32种场景切换动画
- cocos2dx常见32种场景切换动画
- cocos2dx常见32种场景切换动画
- cocos2dx-3.0(12)------33场景切换效果
- cocos2dx 场景切换效果与调用顺序
- cocos2dx之场景切换
- --cocos2dx场景切换--
- cocos2dx切换场景
- Protobuf语言指南
- a list of compiler books — 汗牛充栋的编译器参考资料
- 使用api方式查询数据库和sqlite3工具
- hdu 4451 Dressing
- 【除草】Hackerrank思考题
- 8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画
- 拦截器与过滤器的区别
- 实验三: 栈和队列实验
- ibatis+spring+springmvc+easyui 批量添加
- C语言开发环境设置Cook
- WEB程序设计之javascript
- java身份证验证
- C++STL::string实例化
- object-c多个对象的内存管理