日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画

發(fā)布時間:2024/9/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


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;

?

class TMenu:public CCLayer

{

public:

??? static CCScene * scene();

??? CREATE_FUNC(TMenu);

??? bool init();

?

??? CCMenu * menu;

?

??? void menuCallback(CCObject * sender);

??? void closeCallback(CCObject * sender);

?

??? virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

??? virtual void ccTouchMoved(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;

??? }

}

?

static char * 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);

??? return scene;

}

?

bool TMenu::init()

{

??? CCLayer::init();

?

??? menu = CCMenu::create();

??? for (int i = 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;

??? int i = 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);

?

??? return true;

}

?

void TMenu::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);

??? }

???

}

?

void TMenu::closeCallback(CCObject * sender)

{

??? exit(0);

}

?

bool TMenu::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

??? return true;

}

?

void TMenu::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)

{

??? CCRect rcWin = CCRect(0, 40, winSize.width, winSize.height-80);

??? CCMenuItem * firstItem = (CCMenuItem *)menu->getChildren()->objectAtIndex(0);

??? CCMenuItem * lastItem = (CCMenuItem *)menu->getChildren()->lastObject();

?

??? CCPoint firstInWorld = menu->convertToWorldSpace(firstItem->getPosition());

??? CCPoint lastInWorld = 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 有時候我們想等場景切換徹底完成之后再讓動畫播放,這時候需要做重寫以下代碼:

void onEnter();

void onEnterTransitionDidFinish();

?

案例:

#include "T14Animation.h"

#include "AppMacros.h"

?

CCScene *T14Animation::scene()

{

??? CCScene * scene = CCScene::create();

??? T14Animation * layer = T14Animation::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool T14Animation::init()

{

??? TBack::init();

??? return true;

}

?

//在進入場景的時候做以下操作

void T14Animation::onEnter()

{

??? TBack::onEnter();

??? //以圖片的方式創(chuàng)建一個精靈

??? spr = CCSprite::create("animation/p_2_01.png");

??? //設置精靈的顯示位置

??? spr->setPosition(ccp(winSize.width / 2, winSize.height / 2));

??? addChild(spr);

}

?

//當場景切換徹底完成之后執(zhí)行的動作。

void T14Animation::onEnterTransitionDidFinish()

{

??? TBack::onEnterTransitionDidFinish();

??? //plist中是圖片信息

??? CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/plant.plist");

?

??? //創(chuàng)建動畫

??? CCAnimation * animation = CCAnimation::create();

??? //這個用于存儲圖片的名字

??? char? nameBuf[100];

??? for (int i = 0; i < 8; i++)

??? {

??????? memset(nameBuf, 0, sizeof(nameBuf));

??????? sprintf(nameBuf, "p_2_0%d.png", i + 1);

??? ??? animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));

??? }

??? //設置每次動畫執(zhí)行的時候的延時

??? animation->setDelayPerUnit(0.1f);

??? //這只循環(huán)兩次

??? animation->setLoops(2);

?

??? CCAnimate * animate = CCAnimate::create(animation);

??? spr->runAction(animate);

}

上面案例在場景徹底切換完成之后新場景中的動畫等效果才執(zhí)行。

總結

以上是生活随笔為你收集整理的8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。